• Unity3D面试问题


    注意,是问题,不是笔试题哦。这些是我最近面试北京各公司总结的一些被问到的还算典型的问题。跟大家分享一下。答案是我自己的,不保证标准和完整。

    哎,公司年底开人,又校招一群便宜的小鬼……桑死心了……好在找到工作了。

    言归正传:

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

    这是CG教程里的编程渲染管线示意图。横线上面是在CPU中处理,下面是在GPU计算。
    顶点着色阶段进行坐标变换。模型空间->世界空间->视角空间->投影空间。
    图元装配段进行消隐处理。
    网上相关教程很多……大家自己查阅……
     
    • Dictionary<K,V>与HashTable的区别?
    Dictionary<K,V>是泛型,K,V的类型预先已经确定。而HashTable内的K,V类型不定。Dictionary<K,V>如果顺序地Add,元素是有序的。而HashTable内部是无序的。当K是值类型时,Dictionary<K,V>的速度要比HashTable快。因为值类型在HashTable内会进行装/拆箱。
     
    • LinkedList与List的区别?插入删除、查询谁快?
    LinkedList实际是一个双向链表。List是对数组的一层封装。数组的长度会动态增长。重新分配数组会有一定性能开销。
     
  • 相关阅读:
    Qt之QLineEdit
    Redis与Java
    Qt之属性系统
    Qt之Meta-Object系统
    设计模式(八)外观模式
    Qt之QRadioButton
    Qt之QSystemTrayIcon
    Redis与Java
    JSP公用COMMON文件
    eclipse远程调试Tomcat方法[转]
  • 原文地址:https://www.cnblogs.com/sigmadruid/p/4078263.html
Copyright © 2020-2023  润新知