Unity游戏程序员面试题及解答

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

题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[128];

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

上述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.

 1 public struct FallCacheInfo
 2 {
 3     public Transform parent;
 4 }
 5
 6 public class LevelManager
 7 {
 8     Transform transform;
 9     Dictionary<int,FallCacheInfo> m_FallInfo = new Dictionary<int,FallCacheInfo>();
10
11     void Fall(int id)
12     {
13         FallCacheInfo fci;
14         fci.parent = null;
15         m_FallInfo[id] = fci;
16
17         fci.parent = GameObject.findChild("POS");
18     }
19 }
20
21 void OnWaitFallActorLoaded(int id)
22 {
23     FallCacheInfo fci;
24     if(m_FallInfo.TryGetValue(id,out fci))
25     {
26         transform.parent = fci.parent;
27     }
28 }

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

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

说明:请读者思考。

时间: 2024-10-11 13:03:55

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

游戏程序员摆脱中年危机的不二法宝(什么是核心竞争力)

想必作为程序员的大家,都比较关注"中年危机"这个问题吧?那么,怎么才能摆脱中年危机?也就是说,怎么才能提升核心竞争力?提升核心竞争力的重点是什么?需要具备什么能力?我觉得是自主学习的能力.不管你是不是游戏程序员,不管你是不是程序员,更不管你现在在从事什么行业,都一定要拥有强大的自学能力.互联网时代的技术变革快:就像曾经统治动画多年的技术Flash一样,没想到被HTML5打败.如果你没有足够强大的学习能力,则无法跟上变化.你被淘汰只是时间的问题.想想看,你已经煞费苦心地研究了多年来引以为

【转】游戏程序员养成计划

博客出处:www.cnblogs.com/clayman/archive/2009/05/17/1459001.html 作者:clayman 与玩游戏相比,写游戏要复杂上千万倍,除了需要掌握通用的编程技巧以外,还要有相当的图形学,物理,数学基础,特别是在国内,由于相关资料的缺乏,更是让初学者无从下手.下面总结了一些入门方法和比较容易入手的资料. 首先你要精通一门高级语言,pc上游戏的首选语言就是C++.其次,要有良好的英文阅读能力.对游戏开发者来说英文阅读能力是最重要也是最基本的工具之一,因为

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

下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最新版本,去掉了EJB 2.x等无用内容,补充了数据结构和算法相关的题目.经典面试编程题.大型网站技术架构.操作系统.数据库.软件测试.设计模式.UML等内容,同时还对很多知识点进行了深入的剖析,例如hashCode方法的设计.垃圾收集的堆和代.Java新的并发编程.NIO.2等,相信对准备入职的Ja

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

Java程序员面试题集(71-85) 摘要:这一部分主要包括了UML(统一建模语言).面向对象的设计原则(六原则一法则).GoF设计模式.企业级设计模式.JDBC(Java数据库连接).XML(可扩展标记语言)等知识. 71.UML是什么?UML中有哪些图? 答:UML是统一建模语言(Unified Modeling Language)的缩写,它发表于1997年,综合了当时已经存在的面向对象的建模语言.方法和过程,是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化

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

游戏程序员的学习之路(中文版) Milo Yip · 1 天前 感谢 @楚天阔(tkchu)编写脚本及整理中文译本数据,自动从英文版生成中文版,SVG / PDF 版本中的书籍图片现在链接至豆瓣页面. Github miloyip/game-programmer 检视/下载中文版 SVG / PDF 「真诚赞赏,手留余香」 赞赏 15 人赞赏 程序员游戏开发书籍推荐 分享 举报 977 文章被以下专栏收录 Milo的编程 进入专栏 97 条评论 写下你的评论 trycatch 这是劝退吧...

关于游戏程序员的职业规划

为什么做游戏程序员:乐趣.梦想.财富.成就感 我们的绰号:"程序猿"."码农"."IT民工" 现状: 1.  经常加班,薪水不高,项目不好 2.  亚健康,近视,缺乏锻炼,蓬头垢面,没有活力,容易烦躁 3.  没有女朋友/女朋友跟人跑了,缺爱 4.  透支健康换取财富,牺牲现阶段的幸福.牺牲与家人朋友在一起的时间 5.  技术推陈出新,自身缺乏明确的方向,疲于应付新技术 6.  其实是个体力活,高级民工,幸福指数很低 对策: 1.  尽可能建立起

优秀游戏程序员学习资料推荐

这两天给单位的技术做的一次学习材料推荐培训,直接ppt上拷过来的. 优秀游戏程序员学习资料推荐 主讲人:臧旭 前言 今天提到的纯粹是我个人心得和理解,可能片面,可能以偏概全. 目的是给大家做一定的指引作用,想让大家知道自己还有哪些可以去学习,还有哪些不足,我们距离优秀还有多远. 对我今天提到的东西,如果大家有时间,一定要去深入了解,在技术的道路上才有可能看得远.走得稳.飞得高. 另外有一句对所有技术人员想说的话: 学无止境.切忌坐井观天.有一点小小的成就就沾沾自喜.止足不前. 扎实的基础 万丈高

一个游戏程序员的学习资料

三维图形学: 搞三维图形学首先还是要扎扎实实的先看解析几何.线性代数.计算几何的教材,后面的习题一个都不能少.国内数学书还是蛮好的.苏步青大师的<计算几何>称得上具有世界级水准,可惜中国CAD的宏图被盗版给击垮了.现在是我们接过接力棒的时候了.It’s time! <Computer Graphics Geometrical Tools> <计算机图形学几何工具算法详解>算法很多,纰漏处也不少. <3D Math Primer for Graphics and G

java程序员面试题day01

Java程序员面试题day01 1.jdk和jre有什么区别?各自有什么作用? jdk是java开发的工具包,主要包含各种的类库和工具如javac/javaw/java,也包括了另外的一个jre,提供了两个不同的虚拟机,jdk的bin目录下有client和server两个文件下的jvm.dll文件:jre作为运行环境,仅仅有一个client下的jvm.dll文件. 1.如何利用jdk 编译和运行应用程序? javahome如何配置? 进入到java文件的目录下 编译语句:javac HelloW