下面是最新unity技术面试时被问到的问题,作为unity学习者你又知道多少,现在就认真来看看吧。对找工作应该会有帮助。

 1、NGUI在不同屏幕分辨率下如何适配?

       NGUI本身是按照高度进行适配。NGUI按照目标设备的高度(targetHeight)与设置好的高度(manualHeight)的比值来进行适配。如果宽高比是一样的,则总可以完美适配。但如果不一致,则可能会出现左右两边有黑边(比设备宽高比小)或左右两边被裁减(比设备宽高比大)的情况。因此可以用代码手动修改Camera.orthographicSize来调整与目标屏幕大小的比率。
UI元素的定位可以用UIAnchor。
       UIRoot的ScalingStyle选项有PixelPerfect,FixedSize,FixedSizeOnMobile几个值。使用FixedSizeOnMobile保证UI元素大小不会变化。
 2、NGUI如何减少DrawCall?
       尽量将图素打到一张贴图中,使用同一个材质做一个atlas。并且相同atlas的UI对象,深度要相邻或相同。否则就会产生额外的DrawCall。
 3、内存优化
       使用资源池,缓存需要反复使用的GameObject。数量可以根据需求动态增长和缩减。
       对图片使用MipMap。
       Object销毁要调Destroy,AssetBundle销毁要调用Unload(false)。但这样还不够,适当时候调用Resources.UnloadUnusedAssets()方法释放游戏资源。
       谨慎使用静态变量来引用GameObject。很可能会造成资源释放不干净。
       切换场景时,在OnDestroy方法中对场景资源进行释放。
       尽量使用struct,不用class。
       字符串拼接操作比较多时,使用StringBuilder。
 4、性能优化
       尽量使用相同的材质,方便batch。而且引用时使用sharedMaterial。
       尽量不使用实时光照,使用光照贴图。修改Quality的PixelLightCount来降低光照计算开销。
       尽量少用AlphaTest的Shader。最好使用Mobile目录下的Shader。
       不会动的物体勾选static选项。如果身上有碰撞体,最好不要改变它们位置。
       降低物理计算的更新频率。修改Time的Fixed Timestep。
       降低模型的面数。多用纹理来表现细节。可以考虑使用LOD
 5、减小包大小
       对图片启用压缩。对Mesh启用压缩。对动画启用关键帧压缩。
       对Mesh的Normals,Tangents选项勾选None。它们只有在使用实时照明,法线贴图时使用。
       优化网格。
        少使用System的类库。例如System.Xml。可以使用更加小巧的第三方插件。
       使用Release Build而不是Debugging Build。
       启用Stripping Level。
       将Api Compatibility Level设为.NET 2.0 Subset。
       在Console面板点击Open Editor Log,查看打包时的log。
 6、NGUI如何减少DrawCall
       尽量将图素合并在一张贴图使用一个材质。使用相同Atlas的元素的深度值要相邻或相同。
 7、Dynamic Batch的条件
       顶点数小于300.如果shader使用了Vertex Position, Normal, UV0, UV1 and Tangent,那么只有180.
       使用相同的材质。
       使用了相同的transform scale.
       如果shader使用了多个pass,不能batch。
       接受实时阴影的模型,不能batch。
 8、使用了什么插件?
PureMVC
LitJson
C# Lite
A* Pathfinding  Project
NGUI
RVO
Thrift
 9、NGUI如何屏蔽3D场景的事件响应?
       UICamera.Raycast(mousePosition, out uiHitInfo)
UICamera这个静态方法可以检测是否点击到某个UI元素。可以在3D场景的事件响应时做这一层拦截。
 10、向量点乘叉乘的几何意义
       点乘可以得到一个数值。一般用来确定两向量的夹角。
       叉乘可以得到与两向量垂直的一个向量。一般用来计算法线或者确定平面。

 11、介绍一下图形渲染管线。

Unity技术面试

       这是CG教程里的编程渲染管线示意图。横线上面是在CPU中处理,下面是在GPU计算。
       顶点着色阶段进行坐标变换。模型空间->世界空间->视角空间->投影空间。
       图元装配段进行消隐处理。
       网上相关教程很多……大家自己查阅……
 12、Dictionary<K,V>与HashTable的区别?
       Dictionary<K,V>是泛型,K,V的类型预先已经确定。而HashTable内的K,V类型不定。Dictionary<K,V>如果顺序地Add,元素是有序的。而HashTable内部是无序的。当K是值类型时,Dictionary<K,V>的速度要比HashTable快。因为值类型在HashTable内会进行装/拆箱。
 13、LinkedList与List的区别?插入删除、查询谁快?
       LinkedList实际是一个双向链表。List是对数组的一层封装。数组的长度会动态增长。重新分配数组会有一定性能开销。