典型的一些如手写排序算法、一些基本数学问题,在此就不列举了。以下整理出一些代表性的、有参考价值的题,真实面试题,附有本人的解答,欢迎讨论。

题1.指出下列哪些属于值类型?

int  System.Object  string  UnityEngine.MonoBehaviour  UnityEngine.Object  struct  enum  Vector3

说明:System.Object是所有类型的基类,其本身是引用类型。

题2.获取、增加、删除组建的命令分别是什么?

获取:   GetComponent()     增加:   AddComponent()     删除:   RemoveComponent()

题3.简述你使用过哪些第三方插件?

Skyshop做IBL和PBR,Shatter Toolkit做模型物理破碎,Final IK插件做反向运动学计算。

说明:IBL是基于图像的渲染,PBR是基于物理的渲染。

题4.简述一下对象池原理。什么情况下使用?

对象池可以将对象存储在一块预先划出的内存区域中,当需要时可以取出使用,而不需要每次都要实例化新的对象。一般在需要循环获取一个对象但是不关心对象的创造时机时的情况下可以使用。

说明:对象池在很多语言中都有实现。所以回答不必拘泥于某种具体的语言,说出它的思想即可。

题5.使用mipmap有什么好处和坏处?什么情况下使用?

答:使用mipmap可以降低现存带宽占用,提升渲染性能,还能减少远处因为分辨率较大的纹理因过分缩小而产生的失真。坏处是会使内存占用变大,某些情况下会导致远处贴图模糊。

说明:mipmap是一种纹理技术, 在三维世界中,显示一张图的大小与摄象机的位置有关,近的地方,图片实际象素就大一些,远的地方图片实际象素就会小一些,就要进行一些压缩,例如一张64*64的图,在近处,显示出来可能是50*50,在远处可能显示出来是20*20.如果只限于简单的去除某些像素,将会使缩小后的图片损失很多细节,图片变得很粗糙,因此,图形学有很多复杂的方法来处理缩小图片的问题,使得缩小后的图片依然清晰.

Mipmap纹理技术是目前解决纹理分辨率与视点距离关系的最有效途径,它会先将图片压缩成很多逐渐缩小的图片,例如一张64*64的图片,会产生64*64,32*32,16*16,8*8,4*4,2*2,1*1的7张图片,当屏幕上需要绘制像素点为20*20 时,程序只是利用 32*32 和 16*16 这两张图片来计算出即将显示为 20*20 大小的一个图片,这比单独利用 32*32 的那张原始片计算出来的图片效果要好得多,速度也更快.

当然你不需要回答这些原理,简单描述一下即可。

题6.叙述一下unity3D中的drawcall合并。

答:Unity中使用两种方法进行drawcall合并:静态和动态。勾选static选项的物体系统强制进行静态合并;对于非static的物体,在材质相同的情况下系统会自动进行动态合并。

说明:就如同D3D的Render()一样,Unity每次在准备数据并通知GPU渲染的过程称为一次Draw Call。注意本题不是要你解释"Drawcall"而是解释"Drawcall合并"。

题7.简述兰彻斯特方程在游戏开发中的用途α[M^2- m(t)^2]=β[N^2- n(t)^2]和α[M-m(t)]=β[N-n(t)]

答:式中α、β分别为交战双方在单位时间内毁伤对方战斗单位数,m(t)、n(t)表示在战斗开始后t时刻双方在战斗中尚存的作

战单位数,假设交战开始时刻双方的初始战斗单位数为m(0)=M,n(0)=N,在交战过程中双方战斗单位数符合下列状态方程:

α[M^2- m(t)^2]=β[N^2- n(t)^2]

或者

α[M - m(t)]=β[N - n(t)]。

说明:基本上答到意思就行 。

题8.

int[] a = new int[];

foreach (int aa in a)
{
foreach(int bb in a)
{
foreach(int cc in a)
{
cc = ;
}
}
}

上述C#编写的代码片段有什么问题?

答:首先,在foreach中对临时变量cc赋值本身语法就是错误的,编译器通不过编译。其次,这种嵌套多次使用foreach循环的方式是不妥的,因为foreach语句会产生少量的内存损耗,在性能上也不佳。

说明:(1)要说出语法错误; (2)说出foreach内存和性能损耗,或者不如for语句等缺点。

题9.

public class Dialog{}
{
public static GameObject m_NPC; public static void ShowDialog()
{
m_NPC=Object.Instanciate(Resource.Load("npc") as GameObject);
SaySomething(m_NPC);
}
} void static SaySomething(GameObject npc)
{
...
}

假定以上使用C#编写的类没有语法错误,且能在Unity3D引擎中正常使用。问该类存在哪些问题或隐患?

答:以上Dialog类在实际中会多次调用,而每次调用都要重新载入同样的资源和实例化,这是一种损耗性能的做法。

说明:这道题根据题目描述可以推测是取自实际项目中的,那么肯定是存在一定的不妥才拿出来出题的。各位如果还有什么好的建议可以留言。

题10.

 public struct FallCacheInfo
{
public Transform parent;
} public class LevelManager
{
Transform transform;
Dictionary<int,FallCacheInfo> m_FallInfo = new Dictionary<int,FallCacheInfo>(); void Fall(int id)
{
FallCacheInfo fci;
fci.parent = null;
m_FallInfo[id] = fci; fci.parent = GameObject.findChild("POS");
}
} void OnWaitFallActorLoaded(int id)
{
FallCacheInfo fci;
if(m_FallInfo.TryGetValue(id,out fci))
{
transform.parent = fci.parent;
}
}

上述代码,假定场景中存在名为"POS"的对象,transform也为存在的对象,Fall和OnWaitFallActorLoaded函数依次被执行,请问transform最终被挂到哪个物体(或节点)下?

答:最终被挂在根节点下。

说明:请读者思考。

Unity游戏程序员面试题及解答的更多相关文章

  1. GJM : 游戏程序员的学习之路

    原文作者:miloyip  原帖地址:http://gad.qq.com/article/detail/7180681 原帖备注:版权所有,禁止匿名转载:禁止商业使用:禁止个人使用. 腾讯前端技术总监 ...

  2. zz 游戏程序员的学习之路(中文版)

    游戏程序员的学习之路(中文版) Milo Yip · 1 天前 感谢 @楚天阔(tkchu)编写脚本及整理中文译本数据,自动从英文版生成中文版,SVG / PDF 版本中的书籍图片现在链接至豆瓣页面. ...

  3. Java程序员面试题集(136-150)(转)

    转:http://blog.csdn.net/jackfrued/article/details/17740651 Java程序员面试题集(136-150) 摘要:这一部分主要是数据结构和算法相关的面 ...

  4. Java程序员面试题集(71-85)(转)

    转:http://blog.csdn.net/jackfrued/article/details/17566627 Java程序员面试题集(71-85) 摘要:这一部分主要包括了UML(统一建模语言) ...

  5. Java程序员面试题集(51-70)(转)

    转:http://blog.csdn.net/jackfrued/article/details/17403101 Java程序员面试题集(51-70) 摘要:这一部分主要讲解了异常.多线程.容器和I ...

  6. Java程序员面试题集(1-50)(转)

    转:http://blog.csdn.net/jackfrued/article/details/17339393 下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和 ...

  7. Java程序员面试题集(1-50

    下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最 ...

  8. [No000096]程序员面试题集【上】

    对几家的面试题凭记忆做个总结,基本全部拿到offer,由于时间比较长,题目只写大体意思,然后给出自己当时的答案(不保证一定正确): abstract类不可以被实例化 蛋糕算法: 平面分割空间:(n-1 ...

  9. C/C++程序员应聘试题剖析(转载)

    转载自:http://www.cnitblog.com/zouzheng/articles/21856.html 1.引言 本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面 ...

随机推荐

  1. JavaScript Break 和 Continue 语句

    1.break:终止本层循坏,继续执行本次循坏后面的语句: 当循坏有多层时,break只会跳过一层循坏 2.continue:跳过本次循坏,继续执行下次循坏 对于for循环,continue执行后,继 ...

  2. [转]html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍

    HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对 ...

  3. CF #284 div1 D. Traffic Jams in the Land 线段树

    大意是有n段路,每一段路有个值a,通过每一端路需要1s,如果通过这一段路时刻t为a的倍数,则需要等待1s再走,也就是需要2s通过. 比较头疼的就是相邻两个数之间会因为数字不同制约,一开始想a的范围是2 ...

  4. js闭包(closure),个人理解

    一.闭包概念理解 各种专业文献上对js"闭包"(closure)定义非常抽象,贼难看懂.我的理解是,闭包就是能够读取某函数内部变量的函数.由于在Javascript语言中只有在函数 ...

  5. stl_各容器的总结

    一.stl容器总结: 1.以下的操作是在一千万的数据下操作.copy 都是在足够的空间下进行的copy, 测量方式: std::clock_t start = std::clock(); //待测代码 ...

  6. .NET Core 2.0体验

    .NET Core 2.0预览版及.NET Standard 2.0 Preview 这个月也就要发布了. 具体相关信息可以查看之前的文章.NET Core 2.0及.NET Standard 2.0 ...

  7. JavaScript利用闭包循环绑定事件

    我们经常在做前端面试题的时候,会遇到循环绑定事件后,输出打印结果,很多人总是搞不清楚,今天借此机会跟大家梳理一下闭包相关作用. 1.首先我们举一个简单的例子. html部分: <a href=& ...

  8. poj3261 Milk Patterns 后缀数组求可重叠的k次最长重复子串

    题目链接:http://poj.org/problem?id=3261 思路: 后缀数组的很好的一道入门题目 先利用模板求出sa数组和height数组 然后二分答案(即对于可能出现的重复长度进行二分) ...

  9. JAVA的节点流和处理流

    节点流:可以从或向一个特定的地方(节点)读写数据.如FileReader. 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写.如BufferedReader.处理流的构造方 ...

  10. 【 js 基础 】【 源码学习 】 setTimeout(fn, 0) 的作用

    在 zepto 源码中,$.fn 对象 有个 ready 函数,其中有这样一句 setTimeout(fn,0); $.fn = { ready: function(callback){ // don ...