《Unity面试题》 |
版本 |
作者 |
参与者 |
完成日期 |
备注 |
Unity_JobView_V01_1.0 |
严立钻 |
|
2018.07.26 |
|
|
|
|
|
|
|
|
|
|
|
#Unity面试题ABC:https://blog.csdn.net/VRunSoftYanlz/article/details/78630687 #Unity面试题D:https://blog.csdn.net/VRunSoftYanlz/article/details/78630838 #Unity面试题EF:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
|
##《Unity面试题》发布说明:
++++“Unity面试题”是对在Unity职位面试中相关技术点的总结,立钻哥哥按照一个简单的章节分类进行整理。
++++当然,这些技术点有些是Unity常用的技术点,有些是各种面试题筛选整理,也有些是对Unity面试点的推断拓展。
++++“Unity面试题”将打造成Unity技术宝库,不但是面试的重要参考资料,也是对Unity知识点的汇总。
++++“Unity面试题”将采用简单概述,不拓展,将每个技术点限定在简短篇幅中。
++++Unity面试题ABC:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++Unity面试题D:https://blog.csdn.net/VRunSoftYanlz/article/details/78630838
++++Unity面试题E:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity面试题F:https://blog.csdn.net/VRunSoftYanlz/article/details/78630945
##《Unity面试题》目录:
#第一篇:Unity经典面试题
#第二篇:C#问题
#第三篇:Unity问题
#第四篇:Unity模拟面试
#第五篇:Unity面试进阶
#第六篇:立钻哥哥带您高薪就业
#第五篇:Unity面试进阶 |
##5E.01、Unity面试进阶01 |
++5E.01、Unity面试进阶01
++++5E.01.01、能用foreach遍历访问的对象需要实现的接口或声明方法的类型?
++++5E.01.02、简述NGUI中Panel和Anchor的作用?
++++5E.01.03、简述NGUI中Grid和Table的作用?
++++5E.01.04、简述水面倒影的渲染原理?
++++5E.01.05、Unity的Shader中,Blend SrcAlpha OneMinusSrcAlpha这句话是什么意思?
++++5E.01.06、实时点光源的优缺点是什么?可以有cookies?
++++5E.01.07、问一个Terrain,分别贴3张,4张,5张地表贴图,渲染速度有什么区别?为什么?
++++5E.01.08、将图片的TextureType选项分别选为“Texture”和“Sprite”有什么区别?
++++5E.01.09、有A和B两组物体,有什么办法能够保住A组物体永远比B组物体先渲染?
++++5E.01.10、在编辑场景时将GameObject设置为static有何作用?
++++5E.01.11、将Camera组件的ClearFlags选项选成Depth only是什么意思? 有何作用?
++++5E.01.12、四元数有什么作用?
++++5E.01.13、Unity和Android与iOS如何交互?
++++5E.01.14、客户端与服务器交互方式有几种?
++++5E.01.15、简述C#中代理和事件?
++++5E.01.16、堆和栈的区别?
++++5E.01.17、简述序列化?
++++5E.01.18、Mock和Stub有何区别?
++++5E.01.19、什么是里氏替换原则?
++++5E.01.20、协同程序的执行代码是什么? 有何用处,有何缺点?
++++5E.01.21、请写出斐波那切数列任意一位的值的算法?
++++5E.01.22、什么是渲染管道?
++++5E.01.23、反射的实现原理? 审查元数据并收集关于它的类型信息的能力?
++++5E.01.24、如何让已经存在的GameObeject在LoadLevel后不被卸载掉?
++++5E.01.25、Unity中,摄像机的Clipping Planes的作用是什么? 调整Near、Fare两个值时,应该注意什么?
++++5E.01.26、射线检测碰撞物的原理?
++++5E.01.27、C#中的排序方式有哪些?
++++5E.01.28、C#和C++的区别?
++++5E.01.29、Unity和Cocos2d的区别?
++++5E.01.30、什么是LightMap?
++++5E.01.31、什么是MipMap?
++++5E.01.32、什么是LOD?
++++5E.01.33、向量的点乘、叉乘以及归一化的意义?
++++5E.01.34、简述sealed关键字用在类声明时与函数声明时的作用?
++++5E.01.35、简述Prefab的用处?
++++5E.01.36、CharacterController和Rigidbody的区别?
++++5E.01.37、物体发生碰撞的必要条件?
###5E.01.01、能用foreach遍历访问的对象需要实现的接口或声明方法的类型? |
++5E.01.01、能用foreach遍历访问的对象需要实现的接口或声明方法的类型?
++++立钻哥哥:实现IEnumerable接口和声明GetEnumerator方法的类型。
###5E.01.02、简述NGUI中Panel和Anchor的作用? |
++5E.01.02、简述NGUI中Panel和Anchor的作用?
++++立钻哥哥:1、只要提供一个half-pixel偏移量,它可以让一个控件的位置在Windows系统上精确的显示出来(只有这个Anchor的子控件会受到影响)
++++2、如果挂载到一个对象上,那么他可以将这个对象依附到屏幕的角落或者边缘。
++++3、UIPanel用来收集和管理它下面所有Widget的组件。(通过widget的geometry创建实际的draw call。)(没有panel所有东西都不能够被渲染出来,可以把UIPanel当做Renderer)
###5E.01.03、简述NGUI中Grid和Table的作用? |
++5E.01.03、简述NGUI中Grid和Table的作用?
++++立钻哥哥:对Grid和Table下的子物体进行排序和定位。
###5E.01.04、简述水面倒影的渲染原理? |
++5E.01.04、简述水面倒影的渲染原理?
++++立钻哥哥:水面倒影渲染原理:对水面的贴图纹理进行扰动,以产生波光粼粼的效果。
++++用Shader可以通过GPU在像素级别作扰动,效果细腻,需要的顶点少,速度快。
###5E.01.05、Unity的Shader中,Blend SrcAlpha OneMinusSrcAlpha这句话是什么意思? |
++5E.01.05、Unity的Shader中,Blend SrcAlpha OneMinusSrcAlpha这句话是什么意思?
++++立钻哥哥:作用就是Alpha混合。
++++公式:最终颜色 = 源颜色 * 源透明值 + 目标颜色*(1 - 源透明值)
###5E.01.06、实时点光源的优缺点是什么?可以有cookies? |
++5E.01.06、实时点光源的优缺点是什么?可以有cookies?
++++立钻哥哥:带有alpha通道的立方图(Cubemap)纹理。(点光源是最耗费资源的。)
###5E.01.07、问一个Terrain,分别贴3张,4张,5张地表贴图,渲染速度有什么区别?为什么? |
++5E.01.07、问一个Terrain,分别贴3张,4张,5张地表贴图,渲染速度有什么区别?为什么?
++++立钻哥哥:渲染速度没有区别,因为不管几张贴图只渲染一次。
###5E.01.08、将图片的TextureType选项分别选为“Texture”和“Sprite”有什么区别? |
++5E.01.08、将图片的TextureType选项分别选为“Texture”和“Sprite”有什么区别?
++++立钻哥哥:Sprite作为UI精灵使用;Texture作为模型贴图使用;
++++Sprite需要2的整次幂,打包图片省资源;
###5E.01.09、有A和B两组物体,有什么办法能够保住A组物体永远比B组物体先渲染? |
++5E.01.09、有A和B两组物体,有什么办法能够保住A组物体永远比B组物体先渲染?
++++立钻哥哥:把A组物体的渲染队列大于B物体的渲染队列,通过Shader里面的渲染队列来渲染;
###5E.01.10、在编辑场景时将GameObject设置为static有何作用? |
++5E.01.10、在编辑场景时将GameObject设置为static有何作用?
++++立钻哥哥:设置游戏对象为Static时,这些部分被静态物体遮挡而不可见时,将会剔除(或禁用)网格对象。
++++在场景中所有不会动的物体都应该标记为Static。
###5E.01.11、将Camera组件的ClearFlags选项选成Depth only是什么意思? 有何作用? |
++5E.01.11、将Camera组件的ClearFlags选项选成Depth only是什么意思? 有何作用?
++++立钻哥哥:如果把摄像机的ClearFlags勾选为Deapth Only,那么摄像机就会只渲染看得见的对象,把背景会完全透明,这种情况一般用在两个摄像机以上的场景中。
###5E.01.12、四元数有什么作用? |
++5E.01.12、四元数有什么作用?
++++立钻哥哥:对旋转角度进行计算时用到四元数。
###5E.01.13、Unity和Android与iOS如何交互? |
++5E.01.13、Unity和Android与iOS如何交互?
++++立钻哥哥:Unity可以导出Android和iOS的工程,然后通过安装或者iOS的类去给Unity发消息,调用Unity中的方法。
###5E.01.14、客户端与服务器交互方式有几种? |
++5E.01.14、客户端与服务器交互方式有几种?
++++立钻哥哥:socket(套接字):实现服务器和客户端之间的物理连接,并进行数据传输,主要有UDP和TCP两个协议。
++++Socket处于网络协议的传输层。
++++Http协议传输的主要有Http协议和基于Http协议的Soap协议(Web service),常见的方式是:http的post和get请求;web服务。
###5E.01.15、简述C#中代理和事件? |
++5E.01.15、简述C#中代理和事件?
++++立钻哥哥:代理就是用来定义指向方法的引用。
++++C#事件本质就是对消息的封装,用作对象之间的通信;发送方叫事件发送器,接收方叫事件接收器;
###5E.01.16、堆和栈的区别? |
++5E.01.16、堆和栈的区别?
++++立钻哥哥:栈通常保存着代码执行的步骤;堆上存放的则多是对象,数据等;
++++栈想象成一个接着一个叠放在一起的盒子,每次从最顶部取走一个盒子。(栈,当一个方法(或类型)被调用完成的时候,就从栈顶取走,接着下一个。)
++++堆像是一个仓库,储存着使用的各种对象的信息,栈被调用完毕不会立即被清理掉。
++++heap是堆,stack是栈。
++++stack栈的空间由操作系统自动分配和释放;
++++heap堆的空间是手动申请和释放的;(heap堆常用new关键字来分配)
++++stack栈空间有限,heap堆的空间是很大的自由区;
###5E.01.17、简述序列化? |
++++立钻哥哥:序列化可简单理解成把对象转换为容易传输的格式的过程;
++++比如:可以序列化一个对象,然后使用HTTP通过Internet在客户端和服务端之间传输该对象;
###5E.01.18、Mock和Stub有何区别? |
++5E.01.18、Mock和Stub有何区别?
++++立钻哥哥:Mock:关注行为的验证。(细粒度的测试,即代码的逻辑,多数情况下用于单元测试)
++++Stub:关注状态验证。(粗粒度的测试,在某个依赖系统不存在或者还没实现或者难以测试的情况下使用,例如访问文件系统,数据库连接,远程协议等。)
###5E.01.19、什么是里氏替换原则? |
++5E.01.19、什么是里氏替换原则?
++++立钻哥哥:里氏替换原则(Liskov Substitution Principle,LSP):面向对象设计的基本原则之一。(子类对象可以赋值给基类对象,基类对象不能赋值给子类对象)
++++里氏替换原则(LSP):子类型必须能够替换掉它们的父类型。(使用父类作为参数,传递不同子类完成不同的业务逻辑)
###5E.01.20、协同程序的执行代码是什么? 有何用处,有何缺点? |
++5E.01.20、协同程序的执行代码是什么? 有何用处,有何缺点?
++++立钻哥哥:
void Start(){ //协同程序WaitAndPrint在函数内执行,可以视同于它与Start函数同步执行 StartCoroutine(WaitAndPrint(2.0)); print(“立钻哥哥:Before WaitAndPrint Finishes: ” + Time.time); }
IEnumerator WaitAndPrint(float waitTime){ //暂停执行waitTime秒 yield new WaitForSeconds(waitTime); print(“立钻哥哥:WaitAndPrint: ” + Time.time); }
|
++++协程的作用:一个协同程序在执行过程中,可以在任意位置使用yield语句。(yield的返回值控制何时恢复协同程序向下执行。)
++++协同程序在对象自身帧执行过程中堪称优秀。(协同程序在性能上没有更多的开销)
++++协程的缺点:协同程序并非真线程,可能会发生阻塞。
###5E.01.21、请写出斐波那切数列任意一位的值的算法? |
++5E.01.21、请写出斐波那切数列任意一位的值的算法?
++++立钻哥哥:分别用递归方式实现和迭代方式实现
//递归实现 int Fib1(int index){ if(index < 1){ return -1; }
if(index==1 || index==2){ return 1; }
return Fib1(index - 1) + Fib1(index - 2); }
|
//迭代实现 int Fib2(int index){ if(index < 1){ return -1; }
int a1 = 1, a2 = 1, a3 = 1; for(int i = 0; i < index - 2; i++){ a3 = a1 + a2; a1 = a2; a2 = a3; }
return a3 }
|
###5E.01.22、什么是渲染管道? |
++5E.01.22、什么是渲染管道?
++++立钻哥哥:渲染管道是指在显示器上为了显示图像而经过的一系列必要操作。
++++渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。
++++主要步骤:本地坐标=>视图坐标=>背面裁剪=>光照=>裁剪=>投影=>视图变换=>光栅化
###5E.01.23、反射的实现原理? 审查元数据并收集关于它的类型信息的能力? |
++5E.01.23、反射的实现原理? 审查元数据并收集关于它的类型信息的能力?
++++立钻哥哥:反射实现原理:在运行时根据程序集及其中的类型得到元数据。
++++反射的射线步骤:1、导入using System.Reflection;
++++步骤2:Assembly.Load(“程序集”); :加载程序集,返回类型是一个Assembly;
++++步骤3:得到程序集中所有类的名称:
foreach(Type type in assembly.GetTypes()){ string t = type.Name; } |
++++步骤4:获取当前类的类型:
Type type = assembly.GetType(“程序集.类型”); |
++++步骤5:创建此类型实例:
Activator.CreateInstance(type); |
++++步骤6:获取当前方法:
MethodInfo mInfo = type.GetMethod(“方法名”); |
++++步骤7:调用:mInfo.Invoke(null, 方法参数);
###5E.01.24、如何让已经存在的GameObeject在LoadLevel后不被卸载掉? |
++5E.01.24、如何让已经存在的GameObeject在LoadLevel后不被卸载掉?
++++立钻哥哥:
void Awake(){ DontDestroyOnLoad(transform.gameObject); } |
###5E.01.25、Unity中,摄像机的Clipping Planes的作用是什么? 调整Near、Fare两个值时,应该注意什么? |
++5E.01.25、Unity中,摄像机的Clipping Planes的作用是什么? 调整Near、Fare两个值时,应该注意什么?
++++立钻哥哥:Clipping Planes指的是:裁剪平面;
++++从相机到开始渲染和停止渲染之间的距离;
###5E.01.26、射线检测碰撞物的原理? |
++5E.01.26、射线检测碰撞物的原理?
++++立钻哥哥:射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射。
###5E.01.27、C#中的排序方式有哪些? |
++5E.01.27、C#中的排序方式有哪些?
++++立钻哥哥:C#中的排序:选择排序、冒泡排序、快速排序、插入排序、希尔排序、归并排序;
###5E.01.28、C#和C++的区别? |
++5E.01.28、C#和C++的区别?
++++立钻哥哥:C#是一种完全面向对象的语言,而C++不是;
++++C#是基于IL中间语言和.NET Framework CLR的,在可移植性,可维护性和强壮性都比C++有很大的改进;
++++C#的设计目标是:用来开发快速稳定可扩展的应用程序,当然也可以通过Interop和Pinvoke完成一些底层操作。
###5E.01.29、Unity和Cocos2d的区别? |
++5E.01.29、Unity和Cocos2d的区别?
++++立钻哥哥:1、Unity3D支持C#、javascript等;Cocos2d-x支持C++、Html5、Lua等;
++++2、Cocos2d开源并且免费;
++++3、Unity3D支持iOS、Android、Flash、Windows、Mac、Wii等平台的游戏开发;Cocos2d-x支持iOS、Android、WP等;
###5E.01.30、什么是LightMap? |
++5E.01.30、什么是LightMap?
++++立钻哥哥:LightMap是指在三维软件里实现打好灯光,然后渲染把场景各表面的光照输出到贴图上,最后又通过引擎贴到场景上,这样就使物体有了光照的感觉;
###5E.01.31、什么是MipMap? |
++5E.01.31、什么是MipMap?
++++立钻哥哥:MipMapping:在三维计算机图形的贴图渲染中常用的技术;
++++MipMap为加快渲染进度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为Mipmap。
###5E.01.32、什么是LOD? |
++5E.01.32、什么是LOD?
++++立钻哥哥:LOD(Level of detail):多层次细节,是最常用的游戏优化技术;
++++LOD按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
++++LOD的缺点:增加了内存。
###5E.01.33、向量的点乘、叉乘以及归一化的意义? |
++5E.01.33、向量的点乘、叉乘以及归一化的意义?
++++立钻哥哥:1、点乘描述了两个向量的相似程度,结果越大两向量越相似,还可以表示投影;
++++2、叉乘得到的向量垂直于原来的两个向量;
++++3、标准化向量:用在只关心方向,不关心大小的时候;
###5E.01.34、简述sealed关键字用在类声明时与函数声明时的作用? |
++5E.01.34、简述sealed关键字用在类声明时与函数声明时的作用?
++++立钻哥哥:sealed修饰的类为密封类。
++++sealed类声明时可防止其他类继承此类;
++++sealed在方法中声明则可防止派生类重写此方法;
###5E.01.35、简述Prefab的用处? |
++5E.01.35、简述Prefab的用处?
++++立钻哥哥:在游戏运行时实例化,prefab相当于一个模板,对已经有的素材、脚本、参数做一个默认的配置,以便于以后的修改,同时Prefab打包的内容简化了导出的操作,便于团队的交流;
###5E.01.36、CharacterController和Rigidbody的区别? |
++5E.01.36、CharacterController和Rigidbody的区别?
++++立钻哥哥:Rigidbody具有完全真实物理的特性,Unity中物理系最基本的一个组件,包含了常用的物理特性;
++++CharacterController是受限的Rigidbody,具有一定的物理效果但不是完全真实的,是Unity为了使开发者能方便地开发第一人称视角的游戏而封装的一个组件;
###5E.01.37、物体发生碰撞的必要条件? |
++5E.01.37、物体发生碰撞的必要条件?
++++立钻哥哥:物体发生碰撞的必要条件:
++++条件1、两个物体都必须带有碰撞器(Collider),
++++条件2:其中一个物体还必须带有Rigidbody刚体,
++++条件3:运动的物体带有Rigidbody脚本才能检测到碰撞。
##5E.02、Unity面试进阶02 |
++5E.02、Unity面试进阶02
++++5E.02.01、GameObject.Find和transform.Find的区别?
++++5E.02.02、Unity中使用LitJSON?
++++5E.02.03、请简述AnimatorController中的Has Exit Time的作用是什么?
++++5E.02.04、用sealed修饰的类有什么特点?
++++5E.02.05、MVC模式,M、V、C分别代表什么?
++++5E.02.06、类和结构体的区别?
++++5E.02.07、常用Mathf类函数?
++++5E.02.08、常用Animation类函数?
++++5E.02.09、请简述四元数的作用以及四元数相对于欧拉角的优点?
++++5E.02.10、C#中四种访问修饰符是哪些? 各有什么区别?
++++5E.02.11、下列选项中有关Animator的说法错误的是?
++++5E.02.12、下列选项中,关于Transform组件的Scale参数描述正确的是?
++++5E.02.13、在Unity中的场景中创建Camera时,默认情况下除了带有Transform、Camera、GUILayer、Flare Layer组件之外,还带有以下哪种组件?
++++5E.02.14、如果将一个声音剪辑文件从Project视图拖动到Inspector视图或者Scene视图中的游戏对象上,该游戏对象会自动添加以下哪种组件?
++++5E.02.15、下列叙述中有关Prefab说法错误的是哪一项?
++++5E.02.16、以下关于MonoBehaviour.OnGUI()的描绘错误的是?
++++5E.02.17、以下哪组摄像机中Normalized View Port Rect的数值设置可以使摄像机显示的画面位于1280*720分辨率的屏幕画面右上角?
++++5E.02.18、以下关于WWW.LoadFromCacheOrDownload描述正确的是?
++++5E.02.19、如何实现加载外部视频并播放?
++++5E.02.20、游戏对象B是游戏对象A的子物体,游戏对象A经过了旋转,请写出游戏对象B围绕自身的Y轴进行旋转的脚本语句,以及游戏对象B围绕世界坐标的Y轴旋转的脚本语句?
++++5E.02.21、Unity中用过哪些插件? 具体功能?
++++5E.02.22、当删除Unity工程Assets目录下的.meta文件时会导致什么? 为什么?
++++5E.02.23、频繁创建GameObject会降低程序性能,为什么? 怎么解决?
++++5E.02.24、关于Vector3的API,以下说法正确的是?
++++5E.02.25、以下哪个函数在游戏进入新场景后会被马上调用?
++++5E.02.26、采用Input.mousePosition来获取鼠标在屏幕上的位置,以下表达正确的是?
++++5E.02.27、如何通过脚本来删除其自身对应的GameObject?
++++5E.02.28、某个GameObject有一个名为MyScript的脚本,该脚本中有一个名为DoSomething的函数,则如何在该GameObject的另外一个脚本中调用该函数?
++++5E.02.29、以下选项中,将游戏对象绕Z轴逆时针旋转90度?
++++5E.02.30、public static NetworkConnectionError InitializeServer(int connections, int listenPort, bool useNat); 解释一下函数,参数以及返回值的意思?
++++5E.02.31、请写出以下函数的含义和运算结果?
++++5E.02.32、编写一个函数,输入一个32位整数,计算这个整数有多少个bit为1?
++++5E.02.33、某游戏中的装备系统有16种附加属性,每种附加属性使用一个32位的ID表示(比如10001表示加人物hp的附加属性,10002表示加人物mp的附加属性),一件装备最多有4个附加属性,请写一个程序输出所有附加属性的组合?
++++5E.02.34、请实现如下函数,在Unity中有一副骨骼树,请使用递归方式与非递归方式实现先序遍历,在Unity的Console输出所有骨骼名?
++++5E.02.35、简要解释下数据库中ACID的含义?
++++5E.02.36、详细说明Unity中资源加载的方法,以及他们的区别?
++++5E.02.37、简述static和const关键字的作用?
###5E.02.01、GameObject.Find和transform.Find的区别? |
++5E.02.01、GameObject.Find和transform.Find的区别?
++++立钻哥哥:
++++【GameObject.Find】:GameObject通过名字或者路径来查找游戏对象:GameObject.Find(“立钻哥哥”);
--1、无法查找隐藏对象。(在查找路径上任意一个父物体隐藏都查不到)
--2、如果查找不在最上层,就需要根据路径查找,但路径查找是把双刃剑:
----2.A、优点1:解决查找中可能出现的重名问题;
----2.B、优点2:如果有完全的路径,减少查找范围,减少查找时间;
----2.C、缺点1:结构和路径调整后,容易影响到物体的查找,需要重新定位查找路径;
--3、使用方便但效率低下。
----GameObject.Find:相当于递归遍历查找,虽然操作方便,但效率低下,建议在start中查找对象并保存引用,切忌在Update中动态查找。
++++【transform.Find】:
--1、可以查找隐藏对象;
--2、支持路径查找;
--3、查找隐藏对象的前提是transform所在的根节点必须可见,即active=true;
++++其他查找:
--GameObject.FindWithTag();
--GameObject.FindGameObjectsWithTag();
++++隐藏根节点也可查找:使用Resources.FindObjectsOfTypeAll();
###5E.02.02、Unity中使用LitJSON? |
++5E.02.02、Unity中使用LitJSON?
++++立钻哥哥:
++++【JsonMapper.ToJson()】:将对象转化成字符串;
++++【JsonMapper.ToObject()】:将字符串转换成对象;
###5E.02.03、请简述AnimatorController中的Has Exit Time的作用是什么? |
++5E.02.03、请简述AnimatorController中的Has Exit Time的作用是什么?
++++立钻哥哥:[Has Exit Time]
++++当勾选此项,在动画转换时会等待当前动画播放完毕后才会转换到下一个动画,如果当前动画是循环动画会等待本次播放完毕转换,所以对需要立即转换动画的情况下一定要取消勾选此项;
++++当前动画播放完毕后自动转换到箭头所指的下一条状态(没有其他条件时),此时必须勾选此项,否则动画播放完毕后会卡在最后一帧,如果是循环动画,则会一直循环播放;
###5E.02.04、用sealed修饰的类有什么特点? |
++5E.02.04、用sealed修饰的类有什么特点?
++++立钻哥哥:sealed修饰的类:无法作为其他类的父类,不能含有虚方法和抽象方法;
++++当sealed修饰方法时,该方法不能被子类重写;
###5E.02.05、MVC模式,M、V、C分别代表什么? |
++5E.02.05、MVC模式,M、V、C分别代表什么?
++++立钻哥哥:MVC是model-view-controller的缩写:模型-视图-控制器;
++++M:是操作数据逻辑的部分;
++++V:是显示应用模型数据或交互界面;
++++C:是程序的视图和操作逻辑的协调者;
###5E.02.06、类和结构体的区别? |
++5E.02.06、类和结构体的区别?
++++立钻哥哥:1、类是引用类型;结构体是值类型;
++++2、结构体和类初始化都使用了new,但一个是分配在堆上,一个在栈上;
++++3、结构体是隐式的sealed,不能被继承,也不能从另一个类或结构体继承;类可以继承;
++++建议:当处理数量小的场合使用结构体比较好;对于大量的逻辑对象,使用类比较好;
###5E.02.07、常用Mathf类函数? |
++5E.02.07、常用Mathf类函数?
++++立钻哥哥:
++++【Mathf.Abs()】:绝对值(static float Abs(float f);)
++++【Mathf.Ceil()】:上限值(static float Ceil(float f);)
++++【Mathf.Clamp()】:限制(static float Clamp(float value, float min, float max);)
++++【Mathf.Lerp()】:插值(static float Lerp(float from, float to, float t);)
++++【Mathf.Max()】:最大值(static float Max(params float[] values);)
++++【Mathf.Round()】:四舍五入(static float Round(float f);)
++++【Mathf.PI】:圆周率(static float PI;)
###5E.02.08、常用Animation类函数? |
++5E.02.08、常用Animation类函数?
++++立钻哥哥:
++++【AddClip()】:添加剪辑(public void AddClip(AnimationClip clip, string newName);)
++++【Blend()】:混合(public void Blend(string animation, float targetWeight=1.0F, float fadeLength=0.3F);)
++++【CrossFade】:淡入淡出(public void CrossFade(string animation, float fadeLength=0.3F, PlayMode mode=PlayMode.StopSameLayer);)
++++【Play()】:播放(public bool Play(string animation, PlayMode mode=PlayMode.StopSameLayer);)
++++【Sample()】:采样(public void Sample())
++++【Stop()】:停止(public void Stop())
###5E.02.09、请简述四元数的作用以及四元数相对于欧拉角的优点? |
++5E.02.09、请简述四元数的作用以及四元数相对于欧拉角的优点?
++++立钻哥哥:四元数一般定义:q = w = xi + yj + zk;其中w,x,y,z是实数。(同时i*i=-1, j*j=-1, k*k=-1)
++++四元数也可以表示为:q=[w,v];
++++有多种方式可表示旋转,如axis/angle、欧拉角(Euler angles)、矩阵(matrix)、四元数等;相对其他方法,四元数的优点:
--a、四元数不会有欧拉角存在的gimbal lock问题(万向节死锁);
--b、四元数由4个数组成,旋转矩阵需要9个数;
--c、两个四元数之间更容易插值;
--d、四元数、矩阵在多次运算后会积攒误差,需要分别对其做规范化(normalize)和正交化(orthogonalize),对四元数规范化更容易;
--e、与旋转矩阵类似,两个四元数相乘可表示两次旋转;
###5E.02.10、C#中四种访问修饰符是哪些? 各有什么区别? |
++5E.02.10、C#中四种访问修饰符是哪些? 各有什么区别?
++++立钻哥哥:C#中的四种访问修饰符:属性修饰符、存取修饰符、类修饰符、成员修饰符;
立钻哥哥:C#中访问修饰符:属性修饰符、存取修饰符、类修饰符、成员修饰符; |
|
#A、属性修饰符 |
|
Serializable |
按值将对象封送到远程服务器; |
STAThread |
单线程套间的意思,是一种线程模型; |
MATAThread |
多线程套间的意思,是一种线程模型; |
#B、存取修饰符 |
|
public |
存取不受限制; |
private |
只有包含该成员的类可以存取; |
internal |
只有当前工程可以存取; |
protected |
只有包含该成员的类以及派生类可以存取; |
#C、类修饰符 |
|
abstract |
抽象类:指示一个类只能作为其他类的基类; |
sealed |
密封类:指示一个类不能被继承; |
#D、成员修饰符 |
|
abstract |
指示该方法或属性没有实现; |
sealed |
密封方法。可以防止在派生类中对该方法的override(重载); |
delegate |
委托。用来定义一个函数指针; |
const |
指定该成员的值只读不允许修改; |
event |
声明一个事件 |
extern |
指示方法在外部实现; |
override |
重写。对由基类继承成员的新实现; |
readonly |
指示一个域只能在声明时以及相同类的内部被赋值; |
static |
指示一个成员属于类型本身,而不是属于特定的对象; |
virtual |
指示一个方法或存取器的实现可以在继承类中被覆盖; |
new |
在派生类中隐藏指定的基类成员,从而实现重写的功能; |
#立钻哥哥:C#中的事件驱动是基于:delegate+event的; |
###5E.02.11、下列选项中有关Animator的说法错误的是? |
++5E.02.11、下列选项中有关Animator的说法错误的是?
++++立钻哥哥:D
++++A、Animator是Unity引擎中内置的组件;
++++B、任何一个具有动画状态机功能的GameObject都需要一个Anim组件;
++++C、它主要用于角色行为的设置,包括StateMachine、混合树BlendTrees以及通过脚本控制的事件;
++++D、Animator和Animation组件的用法是相同的;
###5E.02.12、下列选项中,关于Transform组件的Scale参数描述正确的是? |
++5E.02.12、下列选项中,关于Transform组件的Scale参数描述正确的是?
++++立钻哥哥:A
++++A、Transform组件的Scale参数不会影响ParticleSystem产生粒子的大小;
++++B、Transform组件的Scale参数不会影响GUITexture的大小;
++++C、添加Collider组件后的GameObject,其Collider组件的尺寸不受Transform组件的Scale参数影响;
++++D、添加Rigidbody组件后的物体,大小将不再受Transform组件中Scale参数的影响;
###5E.02.13、在Unity中的场景中创建Camera时,默认情况下除了带有Transform、Camera、GUILayer、Flare Layer组件之外,还带有以下哪种组件? |
++5E.02.13、在Unity中的场景中创建Camera时,默认情况下除了带有Transform、Camera、GUILayer、Flare Layer组件之外,还带有以下哪种组件?
++++立钻哥哥:C
++++A、Mouse Look;
++++B、FPS Input Controller;
++++C、Audio Listener;
++++D、Character Motor;
###5E.02.14、如果将一个声音剪辑文件从Project视图拖动到Inspector视图或者Scene视图中的游戏对象上,该游戏对象会自动添加以下哪种组件? |
++5E.02.14、如果将一个声音剪辑文件从Project视图拖动到Inspector视图或者Scene视图中的游戏对象上,该游戏对象会自动添加以下哪种组件?
++++立钻哥哥:C
++++A、Audio Listener;
++++B、Audio Clip;
++++C、Audio Source;
++++D、Audio Reverb Zone;
###5E.02.15、下列叙述中有关Prefab说法错误的是哪一项? |
++5E.02.15、下列叙述中有关Prefab说法错误的是哪一项?
++++立钻哥哥:B
++++A、Prefab是一种资源类型;
++++B、Prefab是一种可以反复使用的游戏对象;
++++C、Prefab可以多次在场景进行实例;
++++D、当一个Prefab添加到场景中,也就是创建了它的一个实例;
###5E.02.16、以下关于MonoBehaviour.OnGUI()的描绘错误的是? |
++5E.02.16、以下关于MonoBehaviour.OnGUI()的描绘错误的是?
++++立钻哥哥:D
++++A、如果MonoBehaviour没有被启用,则OnGUI函数不会被调用;
++++B、用于绘制和处理GUI events;
++++C、每帧可能会被绘制多次,每次对应于一个GUI event;
++++D、每帧被调用一次;
###5E.02.17、以下哪组摄像机中Normalized View Port Rect的数值设置可以使摄像机显示的画面位于1280*720分辨率的屏幕画面右上角? |
++5E.02.17、以下哪组摄像机中Normalized View Port Rect的数值设置可以使摄像机显示的画面位于1280*720分辨率的屏幕画面右上角?
++++立钻哥哥:D
++++A、X=640, Y=360, W=640, H=360;
++++B、X=640, Y=0, W=640, H=360;
++++C、X=0, Y=0, W=0.5, H=0.5;
++++D、X=0.5, Y=0.5, W=0.5, H=0.5;
###5E.02.18、以下关于WWW.LoadFromCacheOrDownload描述正确的是? |
++5E.02.18、以下关于WWW.LoadFromCacheOrDownload描述正确的是?
++++立钻哥哥:C
++++A、可被用于将Text Assets自动缓存到本地磁盘;
++++B、可被用于将Resource自动缓存到本地磁盘;
++++C、可被用于将Asset Bundles自动缓存到本地磁盘;
++++D、可被用于将任意格式的Unity资源文件自动缓存到本地磁盘;
###5E.02.19、如何实现加载外部视频并播放? |
++5E.02.19、如何实现加载外部视频并播放?
++++立钻哥哥:场景设置:MainCamera上添加AudioSource脚本;播放物体上(如Plane)添加MovieTest脚本;
using UnityEngine; using System.Collections;
public class MovieTest : MonoBehaviour{ protected MovieTexture movTexture; //视频纹理
AudioClip audio; AudioSource AudioSource1;
void Start(){ StartCoroutine(DownLoadMovie()); }
void OnGUI(){ if(GUILayout.Button(“播放/继续”)){ //播放/继续播放视频 if(!movTexture.isPlaying){ movTexture.Play(); AudioSource1.Play(); } }
if(GUILayout.Button(“暂停播放”)){ //暂停播放 movTexture.Pause(); AudioSource1.Pause(); }
if(GUILayout.Button(“停止播放”)){ //停止播放 movTexture.Stop(); AudioSource1.Stop(); }
} //立钻哥哥:void OnGUI(){}
IEnumerator DownLoadMovie(){ //”file://” + Applicaiton.dataPath + “/Resources/立钻哥哥.ogg” WWW www = new WWW(“http://127.0.0.1/立钻哥哥.ogg”); yield return www; movTexture = www.movie;
//获取主相机的声源 AudioSource1 = Camera.main.GetComponent(typeof(AudioSource)) as AudioSource; AudioSource1.clip = movTexture.audioClip; //获取视频的声音设置到声源上 audio = AudioSource1.clip;
//设置当前对象的主纹理为电影纹理 renderer.material.mainTexture = movTexture; movTexture.loop = true; //设置电影纹理播放模式为循环 } //立钻哥哥:IEnumerator DownLoadMovie(){}
} //立钻哥哥:public class MovieTest:MonoBehaviour{}
|
###5E.02.20、游戏对象B是游戏对象A的子物体,游戏对象A经过了旋转,请写出游戏对象B围绕自身的Y轴进行旋转的脚本语句,以及游戏对象B围绕世界坐标的Y轴旋转的脚本语句? |
++5E.02.20、游戏对象B是游戏对象A的子物体,游戏对象A经过了旋转,请写出游戏对象B围绕自身的Y轴进行旋转的脚本语句,以及游戏对象B围绕世界坐标的Y轴旋转的脚本语句?
++++立钻哥哥:
++++绕世界坐标Y旋转:transform.Rotate(transform.up * speed * Time.deltaTime);
++++绕自身Y轴旋转:transform.Rotate(Vector3.up * speed * Time.deltaTime);
###5E.02.21、Unity中用过哪些插件? 具体功能? |
++5E.02.21、Unity中用过哪些插件? 具体功能?
++++立钻哥哥:插件:FXMaker、NGUI、EasyTouch、shaderForge、ITween等;
++++FXMaker:制作粒子特效;
++++NGUI:制作2D界面;
++++EasyTouch:摇杆;
++++ShaderForge:制作shader;
++++ITween:制作动画;
###5E.02.22、当删除Unity工程Assets目录下的.meta文件时会导致什么? 为什么? |
++5E.02.22、当删除Unity工程Assets目录下的.meta文件时会导致什么? 为什么?
++++立钻哥哥:删除.meta文件:会导致在场景中游戏对象看不到,或者报错,材质找不到资源等;多人协作的时候会导致资源的重复产生;
++++因为:每个资源文件都对应一个.meta文件,这个.meta文件中的guid就是唯一标识这个资源的。(材质就是通过这个guid来记录自己使用了哪些资源,而且同一个资源的guid会因为不同的电脑而不同,所以当上传了丢失.meta文件的资源的时候,其他机器上就会重新产生guid,那这个资源就相当于垃圾文件了。)
###5E.02.23、频繁创建GameObject会降低程序性能,为什么? 怎么解决? |
++5E.02.23、频繁创建GameObject会降低程序性能,为什么? 怎么解决?
++++立钻哥哥:频繁创建游戏对象,会增加游戏的DrawCall数,降低帧率,GPU会一直在渲染绘制。
++++可以通过对象池来管理对象:当需要创建一个游戏对象时,先去对象池中查找一个对象池中是否存在没有被正在使用的对象,如果有的话直接使用这个对象,并把它标记为正在使用,没有的话就创建一个,并把它添加到池中,然后标记为使用中。
++++一个游戏对象使用完毕的时候,不要销毁掉,把它放在池中,标记为未使用;
###5E.02.24、关于Vector3的API,以下说法正确的是? |
++5E.02.24、关于Vector3的API,以下说法正确的是?
++++立钻哥哥:B、C
++++A、Vector3.normalize可以获取一个三维向量的法线向量;
++++B、Vector3.magnitude可以获取一个三维向量的长度;
++++C、Vector3.forward与Vector3(0,0,1)是一样的意思;
++++D、Vector3.Dot(向量A, 向量B)是用来计算向量A与向量B的叉乘;
###5E.02.25、以下哪个函数在游戏进入新场景后会被马上调用? |
++5E.02.25、以下哪个函数在游戏进入新场景后会被马上调用?
++++立钻哥哥:B
++++A、MonoBehaviour.OnSceneWasLoaded();
++++B、MonoBehaviour.OnSceneEnter();
++++C、MonoBehaviour.OnLevelEnter();
++++D、MonoBehaviour.OnLevelWasLoaded();
###5E.02.26、采用Input.mousePosition来获取鼠标在屏幕上的位置,以下表达正确的是? |
++5E.02.26、采用Input.mousePosition来获取鼠标在屏幕上的位置,以下表达正确的是?
++++立钻哥哥:C
++++A、左上角为原点(0,0),右下角为(Screen.Width, Screen.Height)
++++B、左下角为原点(0,0),右下角为(Screen.Height, Screen.Width)
++++C、左下角为原点(0,0),右上角为(Screen.Width, Screen.Height)
++++D、左上角为原点(0,0),右下角为(Screen.Height, Screen.Width)
###5E.02.27、如何通过脚本来删除其自身对应的GameObject? |
++5E.02.27、如何通过脚本来删除其自身对应的GameObject?
++++立钻哥哥:A
++++A、Destroy(gameObject);
++++B、this.Destroy();
++++C、Destroy(this);
++++D、其他三项都可以;
###5E.02.28、某个GameObject有一个名为MyScript的脚本,该脚本中有一个名为DoSomething的函数,则如何在该GameObject的另外一个脚本中调用该函数? |
++5E.02.28、某个GameObject有一个名为MyScript的脚本,该脚本中有一个名为DoSomething的函数,则如何在该GameObject的另外一个脚本中调用该函数?
++++立钻哥哥:A
++++A、GetComponent().DoSomething();
++++B、GetComponent()
++++C、GetComponent().Call(“DoSomething”);
++++D、GetComponent()
###5E.02.29、以下选项中,将游戏对象绕Z轴逆时针旋转90度? |
++5E.02.29、以下选项中,将游戏对象绕Z轴逆时针旋转90度?
++++立钻哥哥:C
++++A、transform.rotation = Quaternion.Euler(0,0,90);
++++B、transform.rotation = Quaternion.Angle(0,0,90);
++++C、transform.Rotate(new Vector3(0,0,90));
++++D、transform.Rotate(new Vector3(90,0,0));
###5E.02.30、public static NetworkConnectionError InitializeServer(int connections, int listenPort, bool useNat); 解释一下函数,参数以及返回值的意思? |
++5E.02.30、public static NetworkConnectionError InitializeServer(int connections, int listenPort, bool useNat); 解释一下函数,参数以及返回值的意思?
++++立钻哥哥:该函数是:初始化服务器。
++++connections:是允许的入站连接或玩家的数量;
++++listenPort:是要监听的端口;
++++useNat:设置NAT穿透功能;(如果想要这个服务器能够接受连接使用NAT穿透,使用facilitator,设置这个为true)
++++如果有错误会有返回错误;
###5E.02.31、请写出以下函数的含义和运算结果? |
++5E.02.31、请写出以下函数的含义和运算结果?
delegate b Func<a, b>(a a1); static void Main(string[] args){ Func<int, bool> mFunc = x => x==5; Console.WriteLine(mFunc(6)); } |
++++立钻哥哥:运行结果:false
++++函数的含义:就是定义了一个delegate,返回值类型为b,有一个参数,类型为a;
###5E.02.32、编写一个函数,输入一个32位整数,计算这个整数有多少个bit为1? |
++5E.02.32、编写一个函数,输入一个32位整数,计算这个整数有多少个bit为1?
++++立钻哥哥:
uint BitCount(uint n){ uint c = 0; //计数器 while(n > 0){ //当前位是1 if((n&1) == 1){ ++c; //计数器加1 }
n >>= 1; //移位; }
return c; } |
###5E.02.33、某游戏中的装备系统有16种附加属性,每种附加属性使用一个32位的ID表示(比如10001表示加人物hp的附加属性,10002表示加人物mp的附加属性),一件装备最多有4个附加属性,请写一个程序输出所有附加属性的组合? |
++5E.02.33、某游戏中的装备系统有16种附加属性,每种附加属性使用一个32位的ID表示(比如10001表示加人物hp的附加属性,10002表示加人物mp的附加属性),一件装备最多有4个附加属性,请写一个程序输出所有附加属性的组合?
++++立钻哥哥:
###5E.02.34、请实现如下函数,在Unity中有一副骨骼树,请使用递归方式与非递归方式实现先序遍历,在Unity的Console输出所有骨骼名? |
++5E.02.34、请实现如下函数,在Unity中有一副骨骼树,请使用递归方式与非递归方式实现先序遍历,在Unity的Console输出所有骨骼名?
public Transform GetChild(int index); public int Transform.childCount; public void OutPutTree(Transform root){ } |
++++立钻哥哥:
###5E.02.35、简要解释下数据库中ACID的含义? |
++5E.02.35、简要解释下数据库中ACID的含义?
++++立钻哥哥: ACID是指可靠数据库管理系统(DBMS)中,事务所具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)等;
++++Atomicity原子性:是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
++++Consistency一致性:是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。(数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。)
++++Isolation隔离性:多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其他事物运行效果。(在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。)
++++Durability持久性:意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
###5E.02.36、详细说明Unity中资源加载的方法,以及他们的区别? |
++5E.02.36、详细说明Unity中资源加载的方法,以及他们的区别?
++++立钻哥哥:通过Resources模块、通过bundle的形式;
++++1、通过Resources模块,调用它的load函数:可以直接load并返回某个类型的Object,前提是要把这个资源放在Resources命名的文件夹下,Unity不关心有没有场景引用,都会将其全部打入到安装包中;
++++2、通过bundle的形式:将资源打成asset bundle放到服务器或本地磁盘,然后使用WWW模块get下来,然后从bundle中load某个object。
###5E.02.37、简述static和const关键字的作用? |
++5E.02.37、简述static和const关键字的作用?
++++立钻哥哥:
++++【static关键字】的作用:
--1、函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
--2、在模块内的static全局变量:可以被模块内所有函数访问,但不能被模块外其它函数访问;
--3、在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
--4、在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
--5、在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因为只能访问类的static成员变量;
++++【const关键字】的作用:
--1、欲阻止一个变量被改变,可以使用const关键字。(在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了。)
--2、对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或两者同时指定为const;
--3、在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;
--4、对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;
--5、对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”;
##5E.03、Unity面试进阶03 |
++5E.03、Unity面试进阶03
++++5E.03.01、Unity面试经验总结?
++++5E.03.02、一个数组,不用循环,不逐一赋值,把它逆序输出?
++++5E.03.03、为什么UI摄像机和场景摄像机能协同工作?
++++5E.03.04、如何防止UI控件被点穿(如何过滤点击事件)?
++++5E.03.05、对UI功能模块之间相互通信有什么好看法?
++++5E.03.06、怎么能迅速找到某一个UI控件?
++++5E.03.07、请简述一下对数据结构的选取有什么看法?
++++5E.03.08、请把这份配置文件解析成想要的数据结构?
++++5E.03.09、对资源加载有什么看法?
++++5E.03.10、请设计一个状态机,完成一个简单的情景?
++++5E.03.11、写一个计时器工具,从整点开始计时,格式为 00:00:00
++++5E.03.12、C#函数Func(string a, string b)用Lambda表达式怎么写?
++++5E.03.13、请简述重载和重写的区别?
++++5E.03.14、const和readonly有什么区别?
++++5E.03.15、什么时候必须声明一个类为抽象类?
++++5E.03.16、接口和抽象类的区别是什么?
++++5E.03.17、类的私有成员会被子类继承吗? 请说明原因?
++++5E.03.18、请写出C#中的单例模式?
++++5E.03.19、现有一个整数number,请写一个方法判断这个整数是否是2的N次方?
++++5E.03.20、游戏对象消失三种方法的区别?(enabled/Destroy/active)
++++5E.03.21、动态加载资源的方式?
++++5E.03.22、组件是什么?
++++5E.03.23、物理引擎的核心内容?
++++5E.03.24、Collider有几种?
++++5E.03.25、PhysicMaterial有哪些主要属性?
++++5E.03.26、Character Controller(角色控制器)的特性?
++++5E.03.27、使用角色控制器如何防止角色经常卡住?
++++5E.03.28、解释下A*寻路?
++++5E.03.29、如何实现游戏的暂停、加速和减速?
++++5E.03.30、如何在Unity3D中使用单例模式?
++++5E.03.31、什么是游戏AI?
++++5E.03.32、Unity3D中脚本的编译顺序?
++++5E.03.33、有两个相同的方法,放在两个脚本的Awake里,将这两个脚本放在同一个游戏对象上,先执行那个?
++++5E.03.34、图形学底层原理?
++++5E.03.35、NGUI核心原理?
++++5E.03.36、本地数据存储方式?
++++5E.03.37、请描述MeshRender中material和shader的区别?
++++5E.03.38、LayerMask.NameToLayer()这个方法有什么作用?
###5E.03.01、Unity面试经验总结? |
++5E.03.01、Unity面试经验总结?
++++立钻哥哥:面试主要考:C#、Unity基础;大公司问的不难,但问得深,基础必须扎实;
++++【3D图形学、渲染】:渲染管道流程、3D渲染优化;延迟渲染、Shader编程;
++++【数学、数据结构】:二维矩阵、三维矩阵相乘、转置;向量点乘和叉乘方法和意义;四元素、欧拉数;二叉树、堆栈;线性表、链表;
++++【Unity3D】:熟悉NGUI(原理机制);物理引擎;DrawCall优化;AI、自动寻路;做Unity3D遇到的坑(Unity坑特多,只有亲手做过才知道),协同程序,动画系统;光照烘培;Trigger;异步加载(AssetBundle.LoadAsync)。多看API(用户手册、组件手册、脚本手册)
++++【C#语言】:Event和委托;抽象类和接口;垃圾回收器,多线程;
++++【英语能力】:外语文档阅读能力顺畅,因为很多时候要去国外网站了解新技术,所以这个是做的好的关键。(面试的时候,也会给一篇英文技术文档给翻译)
++++【思想】:MVC思想、代码耦合性;代码编写风格(代码头部注释、方法注释);爱玩的游戏以及对它的评价(缺点,怎么改进更好);如果让你设计一个MMO,你应该怎么做等。
###5E.03.02、一个数组,不用循环,不逐一赋值,把它逆序输出? |
++5E.03.02、一个数组,不用循环,不逐一赋值,把它逆序输出?
++++立钻哥哥:利用递归逆序输出。
using System; using System.IO; using System.Text;
namespace YanlzFramework{ class MyProgram{ static void Main(string[] args){ int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8 }; PrintMyArray(arr, arr.Length - 1); }
static void PrintMyArray(int[] arr, int index){ if(index >= 0){ Console.Write(arr[index] + “ ”); PrintMyArray(arr, index - 1); } } } //立钻哥哥:class MyProgram{}
} //立钻哥哥:namespace YanlzFramework{}
|
###5E.03.03、为什么UI摄像机和场景摄像机能协同工作? |
++5E.03.03、为什么UI摄像机和场景摄像机能协同工作?
++++立钻哥哥:UI摄像机和场景射线机分别属于两个渲染层(Layer),所以它们之间的渲染互不干扰。
++++它们没有发生先后错乱,UI永远位于场景之上层:是因为摄像机深度(depth)控制的好。
###5E.03.04、如何防止UI控件被点穿(如何过滤点击事件)? |
++5E.03.04、如何防止UI控件被点穿(如何过滤点击事件)?
++++立钻哥哥:使用一个可渲染的物体或者Panel,绑定BoxCollider组件即可。
++++提示:单用一个不可渲染的物体,即使设定了大小和BoxCollider,也是无法屏蔽的。
###5E.03.05、对UI功能模块之间相互通信有什么好看法? |
++5E.03.05、对UI功能模块之间相互通信有什么好看法?
++++立钻哥哥:UI模块之间尽量解耦合,使用BroadCast机制或者delegate机制;
++++由于Unity自身的BroadCast和SendMsg效率很低,所以推荐使用NGUI自带的那个消息机制;
++++自己实现一个MsgerPool,思路是使用:泛型写法+字典+delegate:效率会很高;
###5E.03.06、怎么能迅速找到某一个UI控件? |
++5E.03.06、怎么能迅速找到某一个UI控件?
++++立钻哥哥:分情况处理,这涉及一个优化策略的问题。
++++首先:如果这个控件在Awake()的时候能知道,那么把它存成一个private变量,代码中使用的时候直接使用即可;
++++如果不行,这个子物体是动态生成的(他可能有或者没有),那尽量使用FindChild(),得到之后加以判断;
++++如果不得不全局找一个东西(比如找到角色物体),才会用Find();
###5E.03.07、请简述一下对数据结构的选取有什么看法? |
++5E.03.07、请简述一下对数据结构的选取有什么看法?
++++立钻哥哥:批量取,经常遍历的数据,会采取List来存储;
++++经常查找的会采取字典存储;
++++如果多个字段比较重要(比如一份配置表经常会id索引以及name索引),那就开辟多个字典进行存储,牺牲空间换取逆向查找效率;
###5E.03.08、请把这份配置文件解析成想要的数据结构? |
++5E.03.08、请把这份配置文件解析成想要的数据结构?
++++立钻哥哥:
++++1、如果这份配置是xml或者json,那么会被转换成HashTable,然后根据配置表的可能拥有字段,挨个拆出并且存入到想要的数据结构中,如果想要的数据结构是字典,需要注意的是:在加入key的时候,应该询问是否包含了这个key,如果包含,则修改,如果不包含,则添加;
++++2、如果这个配置文件是Excel,那么将它转换成一个string数组,数组的每一个元素,都是一个字段数据,按照配置表的顺序挨个取出来存入数据结构中;
###5E.03.09、对资源加载有什么看法? |
++5E.03.09、对资源加载有什么看法?
++++立钻哥哥:资源加载是个难题,用户一遍一遍的吐槽加载的慢,但谁也不愿意让加载变少导致后边必须加载而变得卡顿;
++++对于比较耗时的加载,属于IO操作,在游戏刚登陆的时候,进行初始化加载;
++++强制加载一些重要的模块,比如登陆窗口(用户输入用户名密码的地方)等等;
++++选择性加载一些必要的模块:如果这个用户需要新手引导,则加载新手引导模块,否则不加载;
++++用户一定会用(或者一定不用)的模块,在登录时候处理好。
++++对于应用模块:比如打开一个很庞大的UI,这个怎么加载,如果这个模块很吸金,用户用得概率很大,那么必须在登录时加载,否则那只能用户打开的时候加载了,加载的时候要转圈提示用户。
###5E.03.10、请设计一个状态机,完成一个简单的情景? |
++5E.03.10、请设计一个状态机,完成一个简单的情景?
++++立钻哥哥:每个对象都维护自己的状态机,状态机的状态改变,靠状态触发器;
++++所有的状态(不是状态机,状态机是一个主管:负责调度各种状态),都会重写Begin()、Execute()、End()这三个函数。
###5E.03.11、写一个计时器工具,从整点开始计时,格式为 00:00:00 |
++++立钻哥哥:
using UnityEngine; using System.Collections;
public class MyTimer : MonoBehaviour{ private float timer = 0f; private int h = 0; private int m = 0; private int s = 0; private string timeStr = string.Empty;
void Update(){ timer += Time.deltaTime;
if(timer >= 1f){ s++; timer = 0; }
if(s >= 60){ m++; s = 0; }
if(m >= 60){ h++; m = 0; }
if(h >= 99){ h = 0; } } //立钻哥哥:void Update(){}
void OnGUI(){ timeStr = string.Format(“{0:D2}:{1:D2}:{2:D2}”, h, m, s); GUI.Label(new Rect(10, 10, 100, 200), timeStr); }
} //立钻哥哥:public class MyTimer:MonoBehaviour{}
|
###5E.03.12、C#函数Func(string a, string b)用Lambda表达式怎么写? |
++5E.03.12、C#函数Func(string a, string b)用Lambda表达式怎么写?
++++立钻哥哥:
public delegate string MyDelegate(string a); MyDelegate del = (string a)=>{ return “立钻哥哥:返回值为字符串b” }; |
###5E.03.13、请简述重载和重写的区别? |
++5E.03.13、请简述重载和重写的区别?
++++立钻哥哥:方法重写:提供了子类中改变父类方法行为的实现;
++++方法重载:提供了一个相同的方法,但是方法签名的参数不同的调用的实现;
###5E.03.14、const和readonly有什么区别? |
++5E.03.14、const和readonly有什么区别?
++++立钻哥哥:const关键字:用来声明编译时的常量;
++++readonly关键字:用来声明运行时的常量;
###5E.03.15、什么时候必须声明一个类为抽象类? |
++5E.03.15、什么时候必须声明一个类为抽象类?
++++立钻哥哥:1、当这个类中有抽象方法的时候,必须声明类为抽象类;
++++2、该类没有完全实现父类的抽象方法时,也需要声明为抽象类;
###5E.03.16、接口和抽象类的区别是什么? |
++5E.03.16、接口和抽象类的区别是什么?
++++立钻哥哥:接口中所有的方法都不能有实现,并且不能指定方法的修饰符;
++++抽象类中可以有方法的实现,也可以指定方法的访问修饰符;
++++第一个继承接口的类必须实现接口里的所有方法;
++++抽象类中抽象方法的实现是由第一个非抽象的派生类来实现;
###5E.03.17、类的私有成员会被子类继承吗? 请说明原因? |
++5E.03.17、类的私有成员会被子类继承吗? 请说明原因?
++++立钻哥哥:会被子类继承,但是不能被访问。
++++所以看上去是不能被继承的,实际上确实被继承了。
###5E.03.18、请写出C#中的单例模式? |
++5E.03.18、请写出C#中的单例模式?
++++立钻哥哥:
public class MySingleton{ private static MySingleton instance; private MySingleton(){}
public static MySingleton GetInstance(){ if(instance == null){ instance = new MySingleton(); }
return instance; }
} //立钻哥哥:public class MySingleton{}
|
###5E.03.19、现有一个整数number,请写一个方法判断这个整数是否是2的N次方? |
++5E.03.19、现有一个整数number,请写一个方法判断这个整数是否是2的N次方?
++++立钻哥哥:
private static bool GetFlag(int num){ if(num < 1){ return false; }
return (num & num -1) == 0; }
|
###5E.03.20、游戏对象消失三种方法的区别?(enabled/Destroy/active) |
++5E.03.20、游戏对象消失三种方法的区别?(enabled/Destroy/active)
++++立钻哥哥:对象消失三种方式:.enabled=false; Destroy(); .active=false;
++++【1、gameObject.renderer.enabled = false;】:是控制一个物体是否在屏幕上渲染或显示,而物体实际还是存在的,只是相当于隐身,而物体本身的碰撞体还依然存在;
++++【2、GameObject.Destroy();】:表示移除物体或物体上的组件,代表销毁该物体的内存并没有立即释放,而是在下一个场景中才释放内存资源。(A场景中Destroy的,一般在C场景中才真正释放该物体的内存资源)
++++【3、gameObject.active = false;】:是否在场景中停用该物体。(在gameObject.active=false;中,在场景中用GameObject.Find()找不到该物体)
###5E.03.21、动态加载资源的方式? |
++5E.03.21、动态加载资源的方式?
++++立钻哥哥:动态加载资源的方式:Resources.Load(); Resources.LoadAll(); AssetBundle;
++++【Resources.Load()】:资源必须放在Resources文件夹,只能加载本地文件;
++++【AssetBundle】:和WWW一起使用,可以实现从服务器下载资源,并动态加载。
###5E.03.22、组件是什么? |
++5E.03.22、组件是什么?
++++立钻哥哥:Unity3D面向对象编程最大的体现就是组件化,任何一个游戏对象都是通过附加不同的组件实现。
++++每一个游戏对象都具有一个Transform组件。
###5E.03.23、物理引擎的核心内容? |
++5E.03.23、物理引擎的核心内容?
++++立钻哥哥:物理引擎就是在游戏中模拟真实的物理效果。
++++Unity内置了NVIDIA的Physx物理引擎,Physx是目前使用最为广泛的物理引擎,被很多游戏大作所采用,开发者可以通过物理引擎高效、逼真地模拟刚体碰撞、车辆驾驶、布料、重力等物理效果,使游戏画面更加真实而生动;
++++物理引擎主要包含三个核心内容:Collider碰撞体、Rigidbody刚体、PhysicMaterial物理材质;
++++【1、Collider碰撞体】:是最基本的触发物理的条件,例如碰撞检测。(基本上,没有Collider,物理系统基本没有意义(除了重力));
++++【2、Rigidbody刚体】:是物体的基本物理属性设置,当检测碰撞完之后,就要计算物理效果,而Rigidbody提供计算基本参数;
++++【3、PhysicMaterial物理材质】:是附加的基本物理参数,是一个物理材质,Unity3D有自带默认的物理材质的系数(在Edit/ProjectSetttings/Physic下设置),它参与碰撞的计算,例如反弹效果,摩擦效果等;
++++对Rigidbody施加力的常用方式:AddForce(),添加普通力;AddExplosionForce(),添加爆炸力;AddForceAtPosition(),添加位置力;
###5E.03.24、Collider有几种? |
++5E.03.24、Collider有几种?
++++立钻哥哥:Collider碰撞体有三种:Static Collider(静态碰撞器)、Rigidbody Collider;Kinematic Rigidbody Collider;
++++【1、Static Collider(静态碰撞器)】:带有Collider,没有添加Rigidbody的对象,用于静止物体如地理环境;
++++【2、Rigidbody Collider】:带有Rigidbody的Collider对象,能够根据物理引擎很好的响应外力和碰撞作用;
++++【3、Kinematic Rigidbody Collider】:带有Rigidbody的Collider对象,开启Is Kinematic;
###5E.03.25、PhysicMaterial有哪些主要属性? |
++5E.03.25、PhysicMaterial有哪些主要属性?
++++立钻哥哥:PhysicMaterial主要属性:dynamicFriction、staticFriction、Bounciness;
++++【1、dynamic Friction】:移动摩擦力,值在0到1之间;
++++【2、static Friction】:静止摩擦力,值在0到1之间;
++++【3、Bounciness】:弹力,0值没有弹力,1没有能量损失的反弹;
###5E.03.26、Character Controller(角色控制器)的特性? |
++5E.03.26、Character Controller(角色控制器)的特性?
++++立钻哥哥:角色本身不受Physics影响,需要接受外力作用时,使用OnCharacterColliderHit();
###5E.03.27、使用角色控制器如何防止角色经常卡住? |
++5E.03.27、使用角色控制器如何防止角色经常卡住?
++++立钻哥哥:
++++【Skin Width】:设置为radius的10%;
++++【Step offset】:对于2米高的Character设置为0.1到0.4;
++++【Min move distance】:设置为0即可。
###5E.03.28、解释下A*寻路? |
++5E.03.28、解释下A*寻路?
++++立钻哥哥:A*是实时计算的,导航网格是自动计算的。(A*可以自己研究算法,比导航网格更方便,导航网格被封装了。)
++++首先,A*算法的提出:就是为了解决游戏中从A点到目标B点绕过障碍物,寻找最短路径的问题;
++++其次,A*算法核心:启发式搜素、估值函数、选取最小估值;
++++最后,A*算法的优缺点:理论上是时间最优的;但空间增长是指数级别的;
###5E.03.29、如何实现游戏的暂停、加速和减速? |
++5E.03.29、如何实现游戏的暂停、加速和减速?
++++立钻哥哥:利用Time.timeScale;
++++【0、Time.timeScale = 0;】:可让游戏暂停;
++++【1、Time.timeScale = 1;】:Update()、LateUpdate()、FixedUpdate()等都按正常的时间来执行;
++++【2、Time.timeScale = 2;】:Update()和LateUpdate()的执行速度是之前的2倍;而FixedUpdate()还是按正常时间来执行;
###5E.03.30、如何在Unity3D中使用单例模式? |
++5E.03.30、如何在Unity3D中使用单例模式?
++++立钻哥哥:在Unity3D中使用单例模式:先声明一个静态私有变量,如:instance;再声明一个静态公共方法,如GetInstance(),在该方法中判断instance为null时,通过GameObject.FindObjectOfType(typeof(MyClass))创建instance实例(在C#中直接new一个新的实例),不为null则直接返回;
public class MyClass{ private static MyClass instance; public static MyClass GetInstance{ if(!instance){ instance = GameObject.FindObjectOfType(typeof(MyClass)); }
return instance; } } //立钻哥哥:public class MyClass{} |
###5E.03.31、什么是游戏AI? |
++5E.03.31、什么是游戏AI?
++++立钻哥哥:游戏AI是游戏中的人工智能,AI中最常用的是随机数Random和状态控制;
++++如怪物AI:巡逻(随机目标点)=>发现=>追赶=>攻击=>返回=>继续巡逻;
++++在实际项目中,AI脚本的参数往往设置成Public,供策划人员修改。(如攻击速度、技能类型、移动速度、命中率、攻击百分比等)
###5E.03.32、Unity3D中脚本的编译顺序? |
++5E.03.32、Unity3D中脚本的编译顺序?
++++立钻哥哥:脚本编译过程分四步:
++++第一步:编译所有“Standard Assets”,“Pro Standard Assets”,“Plugins”目录下的代码;
++++第二步:编译所有“Standard Assets/Editor”,“Pro Standard Assets/Editor”,“Plugins/Editor”目录下的代码;
++++第三步:编译除了上面列出来的目录和Editor目录之外的所有代码;
++++第四步:编译Editor目录下的代码;
###5E.03.33、有两个相同的方法,放在两个脚本的Awake里,将这两个脚本放在同一个游戏对象上,先执行那个? |
++5E.03.33、有两个相同的方法,放在两个脚本的Awake里,将这两个脚本放在同一个游戏对象上,先执行那个?
++++立钻哥哥:跟脚本的添加顺序有关,后添加的先执行。
++++由此可以推断游戏对象添加的组件以“栈”的数据结构保存,后进先出;
###5E.03.34、图形学底层原理? |
++5E.03.34、图形学底层原理?
++++立钻哥哥:1、GPU计算:顶点、线、三角、像素颜色(贴图);
++++2、(摄像机进行)可视化检测;
++++3、调用显卡的底层渲染API(OpenGL、DX11):DrawPoint(); DrawLine(); DrawColor();
###5E.03.35、NGUI核心原理? |
++5E.03.35、NGUI核心原理?
++++立钻哥哥:【UIGeometry(几何图形计算)】=>【UIWidget(部件)】=>【UIPanel(容器分组)】=>【UICamera(可视化检测)】=>【UI DrawCall(渲染)】;
###5E.03.36、本地数据存储方式? |
++5E.03.36、本地数据存储方式?
++++立钻哥哥:本地数据存储方式:
++++文本:xml、json、excel(cvs);
++++数据库:SQLite;
++++PlayerPrefs;
###5E.03.37、请描述MeshRender中material和shader的区别? |
++5E.03.37、请描述MeshRender中material和shader的区别?
++++立钻哥哥:Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。
++++绘图单元可以依据这个输出,来将图像绘制到屏幕上。
++++输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质);
###5E.03.38、LayerMask.NameToLayer()这个方法有什么作用? |
++5E.03.38、LayerMask.NameToLayer()这个方法有什么作用?
++++立钻哥哥:LayerMask的使用是按位操作的。
++++LayerMask.NameToLayer(“Players”); 返回该Layer的编号;
++++在射线、摄像机遮罩剔除(Culling Mask)中使用;
##5E.04、Unity面试进阶04 |
++++5E.04.01、将Camera组件的ClearFlags选项选成Depth only是什么意思? 有何用处?
++++5E.04.02、在编辑场景时将GameObject设置为Static有何作用?
++++5E.04.03、在类的构造函数前加上static会报什么错? 为什么?
++++5E.04.04、StreamingAssets和Resources的功能异同?
++++5E.04.05、简述ScriptableObject的作用?
++++5E.04.06、优化代码?
++++5E.04.07、优化代码?
++++5E.04.08、优化代码?
++++5E.04.09、C#中string类型比stringBuilder类型的优势是什么?
++++5E.04.10、Unity3d与Android交互的方式是什么?
++++5E.04.11、Unity3d中如何在编辑器中增加一个自定义menu?
++++5E.04.12、简述Unity3d动画中Avator的用处并举例?
++++5E.04.13、列举减少包体的方法?
++++5E.04.14、for、foreach、while的区别?
++++5E.04.15、final、finally、finallize的区别?
++++5E.04.16、C#中string str = null; 和 string str = “”; 的区别?
++++5E.04.17、TCP和UDP连接有何异同?
++++5E.04.18、面向对象的特征?
++++5E.04.19、什么是委托? 事件是不是委托?
++++5E.04.20、override和overload的区别?
++++5E.04.21、const和readonly的区别?
++++5E.04.22、C#中List、HashTable、Dictionary的区别?
++++5E.04.23、Unity粒子系统的理解?
++++5E.04.24、Render和Shader的区别?
###5E.04.01、将Camera组件的ClearFlags选项选成Depth only是什么意思? 有何用处? |
++5E.04.01、将Camera组件的ClearFlags选项选成Depth only是什么意思? 有何用处?
++++立钻哥哥:如果把摄像机的ClearFlags勾选为Deapth Olny,那么摄像机就会只渲染看得见的对象,把背景会完全透明,这种情况一般用在两个摄像机以上的场景中。
###5E.04.02、在编辑场景时将GameObject设置为Static有何作用? |
++5E.04.02、在编辑场景时将GameObject设置为Static有何作用?
++++立钻哥哥:设置游戏对象为Static时,这些部分被静态物体挡住而不可见时,将会剔除(或禁用)网格对象。
++++因此,在场景中的所有不会动的物体都应该标记为static。
###5E.04.03、在类的构造函数前加上static会报什么错? 为什么? |
++5E.04.03、在类的构造函数前加上static会报什么错? 为什么?
++++立钻哥哥:在构造函数如果有public修饰的静态构造函数时会报错:“静态构造函数中不允许出现访问修饰符”;
++++如果什么修饰符都不加的话不会报错,静态构造函数一般是起初始化作用;
###5E.04.04、StreamingAssets和Resources的功能异同? |
++5E.04.04、StreamingAssets和Resources的功能异同?
++++立钻哥哥:相同点:都是Unity3d保留的目录;
++++不同点:
--1、Resources里的内容在打包的时候会加密和压缩;而StreamingAssets里的资源会直接打包,不做处理;
--2、Resources里的内容需要用Resources.Load()来加载;而StreamingAssets则需要用www来加载;(Assetbundle文件通常也是放在这个StreamingAssets文件夹来进行加载;)
###5E.04.05、简述ScriptableObject的作用? |
++5E.04.05、简述ScriptableObject的作用?
++++立钻哥哥:ScriptableObject是Unity3d提供的一种可序列化脚本。
++++通过ScriptableObject.CreateInstance():可以序列化出一个资源文件。
++++多用来存储数据,方便快捷;
###5E.04.06、优化代码? |
++5E.04.06、优化代码?
void Update(){ Vector3 pos = transform.position; } |
++++立钻哥哥:
private Vector3 pos; void Update(){ pos = transform.position; } |
###5E.04.07、优化代码? |
++5E.04.07、优化代码?
for(int i = 0; i < myArray.Length; i++){ } |
++++立钻哥哥:
length = myArray.Length; for(int i = 0; i < length; i++){ } |
###5E.04.08、优化代码? |
++5E.04.08、优化代码?
x/2.0f; |
++++立钻哥哥:
x*0.5f; |
###5E.04.09、C#中string类型比stringBuilder类型的优势是什么? |
++5E.04.09、C#中string类型比stringBuilder类型的优势是什么?
++++立钻哥哥:如果处理字符串的话,用string中的方法每次都需要创建一个新的字符串对象并且分配新的内存地址;
++++StringBuilder是在原来的内存里对字符串进行修改,所以在字符串处理方面还是建议使用StringBuilder这样比较节约内存;
++++但是String类的方法和功能仍然还是比StringBuilder类要强。
###5E.04.10、Unity3d与Android交互的方式是什么? |
++5E.04.10、Unity3d与Android交互的方式是什么?
++++立钻哥哥:
++++Unity3d调Android采用:AndroidJavaClass和AndroidJavaObject来实现;
++++Android调用Unity3d采用:UnityPlayer.UnitySendMessage(“Main Camera”, “message”, edit.getText().toString());
###5E.04.11、Unity3d中如何在编辑器中增加一个自定义menu? |
++5E.04.11、Unity3d中如何在编辑器中增加一个自定义menu?
++++立钻哥哥:
++++步骤1:创建C#脚本,引入UnityEditor的命名空间;
++++步骤2:实现一个静态函数,在函数上加[MenuItem]的属性;
++++步骤3:脚本放在Editor文件夹下;
###5E.04.12、简述Unity3d动画中Avator的用处并举例? |
++5E.04.12、简述Unity3d动画中Avator的用处并举例?
++++立钻哥哥:在动画中有选择性地启用或禁用特定身体部位。
++++比如一个跑的动画和一个开枪动画。
++++如果要实现跑动中射击:就需要使用Avator。
++++实现上身播放开枪动画,下身播放跑步动画;
###5E.04.13、列举减少包体的方法? |
++5E.04.13、列举减少包体的方法?
++++立钻哥哥:
++++1、纹理格式的压缩(重要):
--减少包体主要改变了纹理的格式,其实就是纹理的压缩算法;
--1.A:采用RGB Crunched DXT1,RGBA Crunched DXT5的纹理格式,此压缩方式会比RGB Compressed DXT1和RGBA Crunched DXT5小一半还要多;
--1.B、去掉纹理格式的mip选项,MipMap会生成多种小图来避免缩小图片时没必要的GPU采样消耗;但使用MipMap的图片会比不使用的图片多占用约三分之一的外存和内存;
++++2、模型文件的压缩:
--模型文件(玩家模型除外):选择压缩类型为中度;
++++3、声音文件的压缩:
--3.A、改变声音文件的比特率;
--3.B、改变声音文件的压缩格式;
++++4、场景的压缩(重要):
--4.A、场景中静态物体对包体大小的影响;
--4.B、减小游戏内静态物体的数量可以减小包体的大小,但是游戏内对静态批处理和Culling等自动化处理都是依据static标记进行的;因此减小包体,会对游戏的帧率有所影响;
###5E.04.14、for、foreach、while的区别? |
++5E.04.14、for、foreach、while的区别?
++++立钻哥哥:知道数组或列表长度时用for;
++++不知道长度用while或foreach;
++++foreach只读不能改变数据结构;
###5E.04.15、final、finally、finallize的区别? |
++5E.04.15、final、finally、finallize的区别?
++++立钻哥哥:
++++final:用于声明属性、方法、类,表示属性不可变,方法不可覆盖,类不可继承;
++++finally:是异常处理结构里的,表示总是要执行的部分;
++++finallize:是Object类的一个方法,在垃圾回收机制中回收对象时会调用对象里的这个方法;
###5E.04.16、C#中string str = null; 和 string str = “”; 的区别? |
++5E.04.16、C#中string str = null; 和 string str = “”; 的区别?
++++立钻哥哥:string str = null; 是不分配内存空间的;
++++string str = “”; 是会分配一个空字符的内存空间;
###5E.04.17、TCP和UDP连接有何异同? |
++5E.04.17、TCP和UDP连接有何异同?
++++立钻哥哥:
++++【TCP】:是传输控制协议,提供的是面向连接的、可靠的、字节流服务;当用户和服务器进行数据传输的时候,必须确保他们之间进行了TCP的连接,TCP还提供了超时重拨,数据校验功能;
++++【UDP】:是用户数据报协议,是一个简单的面向数据报的传输协议,是不可靠的连接;
###5E.04.18、面向对象的特征? |
++5E.04.18、面向对象的特征?
++++立钻哥哥:继承、封装、多态;
###5E.04.19、什么是委托? 事件是不是委托? |
++5E.04.19、什么是委托? 事件是不是委托?
++++立钻哥哥:委托是一个类型安全的对象,它相当于C++里的函数指针;但是委托的安全性更高;
++++事件不是委托,不过由于事件的性质决定了处理它的程序逻辑能访问的参数,因此,在C#中处理事件的逻辑都包装为委托;
###5E.04.20、override和overload的区别? |
++5E.04.20、override和overload的区别?
++++立钻哥哥:overload:重载,表示重写父类的函数,但是它只要函数名相同就行,其他的可以不同;
++++override:重写,是重写父类里的函数,而且方法名、返回类型、参数类型和参数个数都要和父类一致;
###5E.04.21、const和readonly的区别? |
++5E.04.21、const和readonly的区别?
++++立钻哥哥:
++++1、const字段只能在该字段的声明中初始化;而readonly字段可以在声明或在构造函数中初始化。(根据所使用的构造函数,readonly字段可能具有不同的值)
++++2、const字段是编译时常数;而readonly字段可用于运行时常数;
++++3、const对于引用类型的常数,可能的值只能是string和null;而readonly可以是任何类型;
###5E.04.22、C#中List、HashTable、Dictionary的区别? |
++5E.04.22、C#中List、HashTable、Dictionary的区别?
++++立钻哥哥:
++++List:是对数组的封装,当List
++++HashTable、Dictionary:它们的内存是用key值根据hash算法算出来的,它们的内存区域是不连续的,所以在遍历的时候难免会对内存进行换页操作,这样遍历的时间就长;
--Dictionary:1、类型安全,对值类型没有装箱拆箱操作;2、在单条数据的读取上速度快;3、数据的存放是有序的;
--HashTable:线程安全,适合多线程,无序;
###5E.04.23、Unity粒子系统的理解? |
++5E.04.23、Unity粒子系统的理解?
++++立钻哥哥:粒子系统在Unity通常用作制作烟雾,蒸汽,火焰和其他雾化效果,通过一到两个材质的不断绘制,创造一个混乱特效。
++++典型的粒子系统在一个物体上包括一个Particle Emitter粒子发射器,一个Particle Animator粒子播放器,一个Particle Renderer粒子渲染器;
++++如果想和别的物体交互,可以添加一个ParticleCollider粒子碰撞器到物体上;
###5E.04.24、Render和Shader的区别? |
++5E.04.24、Render和Shader的区别?
++++立钻哥哥:Shader:提供了非常直观、实时的表面基本着色效果,根据硬件的能力,还能显示出纹理贴图、光源影响甚至阴影效果,但这一切都是粗糙的,特别是在没有硬件支持的情况下,它的显示甚至会是无理无序的;
++++Render:是基于一套完整的程序计算出来的,硬件对它的影响只是一个速度问题,而不会改变渲染的结果,影响结果的是看它是基于什么程序渲染的,比如是光影追踪还是光能传递;
++立钻哥哥推荐的拓展学习链接(Link_Url):
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++++Unity面试题ABC:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++Unity面试题D:https://blog.csdn.net/VRunSoftYanlz/article/details/78630838
++++Unity面试题EF:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity知识点0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012
++++Unity知识点0008:https://blog.csdn.net/VRunSoftYanlz/article/details/81153606
++++Unity引擎基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685
++++Unity面向组件开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平台开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034
++++UGUI基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693
++++UGUI进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882
++++UGUI综合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013
++++Unity动画系统基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068
++++Unity动画系统进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198
++++Navigation导航系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403
++++Unity数据存储:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite数据库:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162
++++WWW类和协程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559
++++Unity网络:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902
++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267
++++C#委托:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122
++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945
++++C#数据类型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默认的快捷键:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838
++++游戏相关缩写:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++设计模式简单整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641
++++专题:设计模式(精华篇):https://blog.csdn.net/VRunSoftYanlz/article/details/81322678
++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++UML类图:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461
++++U3D_Shader编程(第一篇:快速入门篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader编程(第二篇:基础夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628
++++框架知识点:https://blog.csdn.net/VRunSoftYanlz/article/details/80862879
++++游戏框架(UI框架夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80781140
++++游戏框架(初探篇):https://blog.csdn.net/VRunSoftYanlz/article/details/80630325
++++Lua快速入门篇(基础概述):https://blog.csdn.net/VRunSoftYanlz/article/details/81041359
++++Lua快速入门篇(XLua教程):https://blog.csdn.net/VRunSoftYanlz/article/details/81141502
++++Lua快速入门篇(Xlua拓展):https://blog.csdn.net/VRunSoftYanlz/article/details/81173818
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
--_--VRunSoft:lovezuanzuan--_--