什么是协同程序?
在主线程运行的同时开启另一段逻辑处理来协助当前程序的执行,协同程序像多线程但不是多线程,协程在每帧结束之后检测yield条件是否满足。
协同函数在MonoBehavior哪一阶段执行?
碰撞器和触发器区别?
Is Trigger = true 时作为触发器,碰撞器被物理引擎忽略没有碰撞效果。
碰撞的必要条件?
至少一个为刚体,两者皆带有碰撞器。
ArrayList和List区别?
ArrayList会把所有插入的数据当作Object处理,装箱拆箱操作费时,List是泛型类,功能与ArrayList类似,可避免装箱拆箱操作。
工程间数据迁移?
1.Asset和Library目录一起迁移
2.导出Package
3.asset server 功能
CharacterController与Rigidbody区别?
CharacterController可理解为受限的Rigidbody,具有物理效果但不完全真实。
sealed关键字在类声明与函数声明时的作用?
sealed修饰的类为密封类,可防止其他类继承,修饰方法时可防止派生类重写此方法。
internal关键字的作用?
只能在包含该类的程序集中访问该类。
碰撞各阶段对应的函数?
OnCollisionEnter——OnCollisionStay——OnCollisionExit
脚本生命周期中主要方法?
Awake——OnEnable——Start——Update——FixedUpdate——LateUpdate——OnGUI——OnDisable——OnDistroy
场景中多个Camera处于活动状态会如何?
游戏界面可看到多相机混合结果。
Interface与抽象类的区别?
Interface只定义方法不实现细节,抽象类中可以有方法实现。Interface的子类必须实现接口的所有方法。
LightMap?
在三维软件中预先打好光,输出光照贴图,通过引擎贴至场景,使之有光照感。
类和结构体的区别?
类是引用类型,结构体是值类型。
ref和out有何区别?
效果相同,均为通过关键字找到定义在函数中变量的内存地址。区别为ref必须初始化,out必须在函数里赋值。ref参数是引用,out参数为输出参数。
委托原理及作用?
委托类似于一种安全的指针引用,在使用它时是当做类来看待而不是一个方法,相当于对一组方法的列表的引用。用处:使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。
排序方法?
快速排序、选择排序、冒泡排序、插入排序
反射的实现原理?
。。。。。。
四元数与欧拉角?
四元数可避免万向锁,进行增量旋转。
LateUpdate?
在Update后调用,常进行相机跟随等操作,用于避免相机已推进,但视角中未有角色的空帧出现。
渲染流水线?
优化内存?
1.压缩自带类库
2.释放AssetBundle占用的资源
3.减低模型面数,降低骨骼数量,降低贴图大小
4.使用光照贴图,LOD,Prefab,Shader
5.减少临时变量
动态加载资源?
1.Resource.Load()
2.AssetBundle
漫反射兰伯特定律?
GC?
https://www.cnblogs.com/zblade/p/6445578.html
降低DrawCall?
对于OpenGL,绘制参数(状态值)的变更要比绘制大量顶点更耗费CPU。高速绘图即尽量在不改变状态值的情况下,一次DrawCall完成所有绘制。
Unity——PlayerSetting中:
Static Batching:将表明为Static的静态物体,如果相同材质球,Unity自动合并为Batch送往GPU。
Dynamic Batching:物体小于300面条件下,无论动静态物体,使用相同材质球,Unity会自动合并为Batch送往GPU。
若两物体材质仅纹理不同,可通过将纹理合并成大纹理,便可使用统一材质替代。
多角度优化?
CPU
DrawCall影响的是CPU效率,物理组件、GC、代码质量也会影响CPU。
每次DrawCall时CPU需要做很多准备工作,而对于GPU工作量是不变的,因此降低DrawCall就是解放CPU在调用图形接口上的开销。
1. DrawCall Batching
2.纹理打包成图集减少材质使用
3.减少反光、阴影等效果,其会导致物体多次渲染
GPU
1.减少顶点数量
2.压缩图片,以适应显存宽带
3.使用纹理图集
4.使用光照纹理而非实时光照
5.LOD
6.遮挡剔除
7.使用Mobile版shader
内存
1.Unity内部内存
2.Mono的托管内存,引用类型。
3.对象池
值类型:int、float、struct...
引用类型:类的实例
泛型优缺点?
值类型与引用类型?
事件与委托?
NGUI按钮的触发原理?
NGUI中Grid与Table的区别?
C#中基本类型占用字节数?
Unity中读取.txt的几种方法?
虚函数与抽象函数的区别?
如何解决UGUI/NGUI与粒子特效的遮挡问题?
Unity使用C#作为开发语言的优势?
DestroyImmediate与Destory的区别?
.mate文件的作用?