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

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

言归正传:

  • 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是对数组的一层封装。数组的长度会动态增长。重新分配数组会有一定性能开销。
 

Unity3D面试问题的更多相关文章

  1. Unity3D 面试三 ABCDE

    说说AB两次面试: “金三银四” 三月份末又面试过两家:共和新路2989弄1号1001这家找了我半天,哇好漂亮的办公大楼!问了保安才知道,这个地址是小区地址.另一家也是创业公司面试我的自称是在腾讯做过 ...

  2. Unity3D 面试ABC

    最先执行的方法是: 1.(激活时的初始化代码)Awake,2.Start.3.Update[FixUpdate.LateUpdate].4.(渲染模块)OnGUI.5.再向后,就是卸载模块(TearD ...

  3. Unity3D面试——真实的面试,unity3d面试

    本来想写一个系列的,一半是抨击现在面试之水,要人之奸,用大哥的话说,要走新手是做螺丝钉和抹布用的.另一半是对出出学校的或者是自废武功转3d的朋友们提供一个比较有价值的参考.不过我时间实在仓促.没有保证 ...

  4. 续上文,Unity3D面试ABC

    http://www.unitymanual.com/blog-3573-685.html 最先执行的方法是: 1.(激活时的初始化代码)Awake,2.Start.3.Update[FixUpdat ...

  5. Unity3d面试6

    1,如何避免点击UI按钮时穿透,同时触发了相同位置场景模型的点击事件的情况?(NGUI)1,如何避免点击UI按钮时穿透,同时触发了相同位置场景模型的点击事件的情况?(NGUI 判断 是否点击到UI) ...

  6. unity3d 我的面试经历

    昨天在上海的一家公司面试成功了 这是我第一次面试,也是我的第一份工作 先上我的简历给大家参考下吧 个人简历 个人信息: 姓 名: 廖旭升         学 历: 无 民 族: 汉           ...

  7. 去蓝港在线面试Unity3D的笔试题。难吗?知道答案的在评论里写出来分享

    前一阵子去蓝港面试unity3d程序,在前台登记以后被领到一个吧台前面填2张个人信息表,之后有人送来笔试题,做了1个小时,感觉挺难的.之后被带到下面面试,面试的是一个年龄稍大的(可能是项目经理或者技术 ...

  8. Unity3D 记第二次面试

    2014-03-10 忍不住投递了几份简历大概有20个,总共收到面试电话2个,十分之一.一个是11号下午4点面试另一个是12号下午3点面试(后来没去至于原因下面有)12号没去,为什么?因为招聘要求“精 ...

  9. Unity3D 记第一次面试

    事情是发生在2014-03-05 周三下午 在群里面看到上海艺游急聘Unity3D开发工程师,就整理了下简历投了去!直到接到电话通知我去面试才知道 我之前是有投了简历!太忙了 以至于真的忘了,不过那个 ...

随机推荐

  1. MySQL之高级增删改查一

    一.select all/distinct 字段名/别名 from table where条件+[1]+[2]+[3]: where条件:>,<,≥,≤,like,between and( ...

  2. poj 3320 复习一下尺取法

    尺取法(two point)的思想不难,简单来说就是以下三步: 1.对r point在满足题意的情况下不断向右延伸 2.对l point前移一步 3.  回到1 two point 对连续区间的问题求 ...

  3. 2-Perl 环境安装

    1.Perl 环境安装在我们开始学习 Perl 语言前,我们需要先安装 Perl 的执行环境.Perl 可以在以下平台下运行:Unix (Solaris, Linux, FreeBSD, AIX, H ...

  4. Eclipse怎么改变@author 姓名

    1 点击windows  然后选择 点击进去选择搜索code Templates  点击选择出现下面的页面 点开comments,里面有给方法,变量 ,类等加注释设置的模板 如:点击Methods  ...

  5. 服务端相关知识学习(五)之Zookeeper leader选举

    在上一篇文章中我们大致浏览了zookeeper的启动过程,并且提到在Zookeeper的启动过程中leader选举是非常重要而且最复杂的一个环节.那么什么是leader选举呢?zookeeper为什么 ...

  6. 前段js实时判断会话是否超时

    前端自行判断页面是否超时 jsp从后台获取到回话时间var sessionTime="${sessionTime}"; js中 //实时判断会话是否超时 var lastSessi ...

  7. vue入门:(class与style绑定)

    对象语法 数组语法 一.对象语法 1.1对象语法绑定HTML Class 语法:v-bind:class="{'className1':boolean1,'className2':boole ...

  8. git commit报错解决,绕过代码检查

    上一个项目用的svn,新项目用了git,很开心,终于学习了git了,本以为把git都学会了,但是还是遇到了一个不在自己学习的知识点范围内的问题,最后是同事帮忙解决的. 问题:第一次代码commit的时 ...

  9. 9 java 笔记

    1 所有的java对象都可以和字符串进行连接运算 2 在java中判断两个变量是否相等时:==运算符适用于基本类型的判断 3 JVM常量池保证相同的字符串直接量只有一个,不会产生多个相同的副本 4 O ...

  10. 常见排序&查询算法Java代码实现

    1. 排序算法代码实现 /** * ascending sort * 外层循环边界条件:总共需要冒泡的轮数--每一轮都将最大或最小的数冒泡到最后 * 内层循环边界条件:冒泡数字移动的边界--最终数字需 ...