辅助资料游戏设计unity3D技术分享

unity3d-高频率面试题目

2016-06-21  本文已影响1583人  好怕怕

更新:【面试题含答案】
http://bbs.9ria.com/thread-288394-1-1.html

高频问答的问题:

什么是多态?
简单的说,就是用父类的引用指向子类的对象。多态可以理解成“一个接口,多种实现”,就是同一种事物表现出的多种形态,多态允许将子类的对象当作父类的对象使用,某父类型的引用指向其子类型的对象,调用的方法是该子类型的方法。
多态的作用?
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

有限状态机(finite-state machine)

有限状态机,又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。

有限状态机可以将复杂的逻辑简化为有限个稳定状态,在稳定状态中判断事件。其中有限不是指有限次处理,而是有限个稳定状态,并且有限状态机是一个闭环系统,可以用有限的状态处理无尽的事务。

【Unity3d中的力的模式分为4种(ForceMode 力模式)分别是:】
1、Force:添加一个可持续力到刚体,使用它的质量。
2、Acceleration:添加一个可持续加速度到刚体,忽略它的质量。
3、Impulse:添加一个瞬间冲击力到刚体,使用它的质量。
4、VelocityChange:添加一个瞬间速度变化给刚体,忽略它的质量。

【物理系统中一共有6中添加力的方法,分别是:】
1、AddForce:添加一个力到刚体。作为结果刚体将开始移动。
2、AddRelativeForce:添加一个力到刚体。相对于它的系统坐标。
3、AddTorque:添加一个力矩到刚体。
4、AddRelativeTorque:添加一个力矩到刚体,相对于刚体自身的坐标系统。
5、AddForceAtPosition:在position位置应用force力。作为结果这个将在这个物体上应用一个力矩和力。
6、AddExplosionForce:应用一个力到刚体来模拟爆炸效果。爆炸力将随着到刚体的距离线形衰减。

1什么是渲染管道?

是指在显示器上为了显示出图像而经过的一系列必要操作。

渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。

主要步骤有:

本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化。

2如何优化内存?

有很多种方式,例如

1.压缩自带类库;

2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;

3.释放AssetBundle占用的资源;

4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;

5.使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。

3动态加载资源的方式?(有时候也问区别,具体请百度)

1.Resources.Load();

2.AssetBundle

4什么是协同程序?

在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个线程。可以用来控制运动、序列以及对象的行为。

5你用过哪些插件?

(最好多熟悉几个插件,问的时候好回答)

6什么是渲染管道?

是指在显示器上为了显示出图像而经过的一系列必要操作。

渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。

主要步骤有:

本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化。

7如何优化内存?

有很多种方式,例如

1.压缩自带类库;

2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;

3.释放AssetBundle占用的资源;

4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;

5.使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。

8动态加载资源的方式?(有时候也问区别,具体请百度)

1.Resources.Load();

2.AssetBundle

9什么是协同程序?

在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个线程。可以用来控制运动、序列以及对象的行为。

10你用过哪些插件?

(最好多熟悉几个插件,问的时候好回答)

a) 一 界面制作 推荐:NGUI

b) 二 2D游戏制作 推荐:2D Toolkit //[?tu:lk?t] 工具包,工具箱

c) 三 可视化编程 推荐:PlayMaker

d) 四 插值插件 推荐:iTween,HOTween

e) 五 路径搜寻 推荐:Simple Path

f) 六 美术及动画制作 推荐:RageSpline,Smooth Moves

g) 七 画面增强 推荐:Bitmap2Material,Strumpy Shader Editor

h) 八 摄像机管理 推荐:Security Camera

i) 九 资源包 推荐:Nature Pack

j) 十、造路插件EasyRoads3D

====================================================

1.使用Unity3d实现2d游戏,有几种方式?

1.使用本身的GUI;

2.把摄像机的Projection(投影)值调为Orthographic(正交投影),不考虑z轴;

3.使用2d插件,如:2DToolKit;

2.Unity3d中的碰撞器和触发器的区别?

碰撞器有碰撞的效果,IsTrigger=false,可以调用OnCollisionEnter/Stay/Exit函数;

触发器没有碰撞效果,IsTrigger=true,可以调用OnTriggerEnter/Stay/Exit函数。

3.物体发生碰撞的必要条件

两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体。

4.CharacterController和Rigidbody的区别?

CharacterController自带胶囊碰撞器,里面包含有刚体的属性;

Rigidbody就是刚体,使物体带有刚体的特征。

5.在物体发生碰撞的整个过程中,有几个阶段,分别列出对应的函数

三个阶段

1.OnCollisionEnter

2.OnCollisionStay

3.OnCollisionExit

6.Unity3d的物理引擎中,有几种施加力的方式,分别描述出来

rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函数中。

7.什么叫做链条关节?

Hinge Joint,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。

8.物体自身旋转使用的函数?

Transform.Rotate()

9.物体围绕某点旋转使用的函数?

Transform.RotateAround()

10.Unity3d提供了一个用于保存和读取数据的类(PlayerPrefs),请列出保存和读取整形数据的函数

PlayerPrefs.SetInt() PlayerPrefs.GetInt()

11.Unity3d提供了几种光源类型,分别是哪几种?

四种。

平行光:Directional Light 点光源:Point Light

聚光灯:Spot Light 区域光源:Area Light

12.Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法。

Awake——>Start——>Update——>FixedUpdate——>LateUpdate——>OnGUI——>Reset——>OnDisable——>OnDestroy

13.物理更新一般放在哪个系统函数里?

FixedUpdate,每固定帧绘制时执行一次,和Update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。

14.移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中?

LateUpdate,在每帧执行完毕调用,它是在所有Update结束后才调,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有Update操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。

15.当游戏中需要频繁创建一个物体时,我们需要怎样做能够节省内存?

使用预制物体对象Prefab,然后复制创建。

16.在场景中放置多个Camera并同时处于活动状态会发生什么?

游戏界面可以看到很多摄像机的混合。

17.请描述Prefab的作用,并描述如何在移动设备的环境下恰当的使用它?

Prefab在实例化的时候用到,主要用于经常会用到的物体,属性方便修改。

18.如何销毁一个UnityEngine.Object及其子类?

使用Destroy()方法;

19.请简述Unity3d下如何安全的在不同工程间迁移asset数据,请列举出三种方法?

1.可以把assets目录和Library目录一起迁移

2.导出包

3.用Unity带的assets Server功能

20.请描述游戏动画有哪几种,以及其原理?

主要有关节动画、骨骼动画、单一网格模型动画(关键帧动画)。

关节动画:把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整体的动画,角色比较灵活,Quake2中使用这种动画;

骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,有关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观;

单一网格模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。

21.请描述为什么Unity3d中会发生在组件上出现数据丢失的情况

一般是组件上绑定的物体对象被删除了

22.alpha blend工作原理

Alpha Blend 实现透明效果,不过只能针对某块区域进行alpha操作,透明度可设。

23.写出光照计算中的diffuse的计算公式

diffuse = Kd x colorLight x max(N*L,0);Kd 漫反射系数、colorLight 光的颜色、N 单位法线向量、L 由点指向光源的单位向量、其中N与L点乘,如果结果小于等于0,则漫反射为0。

24.Lod是什么,优缺点是什么?

LOD(Level of detail)多层次细节,是最常用的游戏优化技术。它按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。

25.两种阴影判断的方法、工作原理。

26.A.阴影由两部分组成:本影与半影

27.a.本影:景物表面上那些没有被光源直接照射的区域(全黑的轮廓分明的区域)

28.b.半影:景物表面上那些被某些特定光源直接照射但并非被所有特定光源直接照射的区域(半明半暗区域)

29.求阴影区域的方法:做两次消隐过程

30.一次对每个光源进行消隐,求出对于光源而言不可见的区域L;

31.一次对视点的位置进行消隐,求出对于视点而言可见的面S;

32.shadow area= L ∩ S

33.B.阴影分为两种:自身阴影和投射阴影

34.自身阴影:因物体自身的遮挡而使光线照射不到它上面的某些可见面

35.工作原理:利用背面剔除的方法求出,即假设视点在点光源的位置。

36.投射阴影:因不透明物体遮挡光线使得场景中位于该物体后面的物体或区域受不到光照照射而形成的阴影

37.工作原理:从光源处向物体的所有可见面投射光线,将这些面投影到场景中得到投影面,再将这些投影面与场景中的其他平面求交得出阴影多边形,保存这些阴影多边形信息,然后再按视点位置对场景进行相应处理得到所要求的视图(利用空间换时间,每次只需依据视点位置进行一次阴影计算即可,省去了一次消隐过程)

38.若是动态光源此方法就无效了。

26.Vertex Shader是什么,怎么计算?

顶点着色器

顶点着色器是一段执行在GPU上的程序,用来取代fixed pipeline中的transformation和lighting,Vertex Shader主要操作顶点。

Vertex Shader对输入顶点完成了从local space到homogeneous space(齐次空间)的变换过程,homogeneous space即projection space的下一个space。在这其间共有world transformation, view transformation和projection transformation及lighting几个过程。

27.MipMap是什么,作用?

MipMapping:在三维计算机图形的贴图渲染中有常用的技术,为加快渲染进度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为MipMap。

28.机试:二选一

1.用代码实现第三角色控制器

2.实现吊机吊物体的功能

29.反向旋转动画的方法是什么?

【反转动画,讲动画的速度调到-1,碰撞时,被碰撞物体与碰撞物体有collider组件,碰撞物体有刚体组件,或角色碰撞得包含角色组件 OR 改变animation.speed】

30.碰撞检测需要物体具备什么属性?

31.能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器

32.【Physics.OverlapSphere相交球检测碰撞,碰撞检测需要包围盒】

31.获取、增加、删除组件的命令分别是什么?

获取:GetComponent

增加:AddComponent

删除:Destroy

32.Animation.CrossFade命令作用是:(C)

A.动画放大 B.动画转换 C.动画的淡入为其他动画

33.Application.loadLevel命令为:(A)

A.加载关卡 B.异步加载关卡 C.加载动作

34.调试记录到控制台的命令是什么?

Debug.Log();

35.编辑器类存放路径是什么?

工程目录下的Assets/Editor文件夹下。

36.使用原生GUI创建一个可以拖动的窗口命令是什么?

GUI.DragWindow();

37.localPosition与Position的使用区别?

localPosition:自身位置,相对于父级的变换的位置。

Position:在世界坐标transform的位置

38.意义连线

Mathf.Round 插值

Mathf.Clamp 四舍五入

Mathf.Lerp 限制

39.写一个计时器工具,从整点开始计时,格式为:00:00:00

40.写出Animation的五个方法

AddClip 添加剪辑、Blend 混合、Play 播放、Stop 停止、Sample 采样

41.怎么拿到一个对象上脚本的方法

GameObject.GetComponent<>();

42.上机题:用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放(用一个Cube即可)。

43.请简述向量的点乘,向量的叉乘以及向量归一化的几何意义?

点乘的几何意义是:计算两个向量之间的夹角,以及在某一方向上的投影;

叉乘的几何意义是:创建垂直于平面,三角形,或者多边形的向量;参考:http://blog.sina.com.cn/s/blog_9283b6f601017hfw.html

46..Unity3D是否支持写成多线程?如果支持的话要注意什么?

支持:如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine.{ [k?ru:'ti:n] n. 协同程序}

注意:C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象

47.Unity3D中的协程(Coroutine)和C#线程之间的区别是什么?

Unity3d没有多线程的概念,不过unity也给我们提供了StartCoroutine(协同程序)和LoadLevelAsync(异步加载关卡)后台加载场景的方法。 StartCoroutine为什么叫协同程序呢,所谓协同,就是当你在StartCoroutine的函数体里处理一段代码时,利用yield语句等待执行结果,这期间不影响主程序的继续执行,可以协同工作。而LoadLevelAsync则允许你在后台加载新资源和场景,所以再利用协同,你就可以前台用loading条或动画提示玩家游戏未卡死,同时后台协同处理加载的事宜asynchronous[e??s??kr?n?s].synchronous同步

48.请简述四元数的作用以及四元数相对于欧拉角的优点

A.四元数一般定义如下:q=w+xi+yj+zk其中 w,x,y,z是实数。同时,有: ii=-1 jj=-1 k*k=-1

B.四元数也可以表示为: q=[w,v]

有多种方式可表示旋转,如 axis/angle、欧拉角(Euler angles)、矩阵(matrix)、四元组等。 相对于其它方法,四元组有其本身的优点:

a.四元数不会有欧拉角存在的 gimbal lock 问题[万向节死锁]

b.四元数由4个数组成,旋转矩阵需要9个数

c.两个四元数之间更容易插值

d.四元数、矩阵在多次运算后会积攒误差,需要分别对其做规范化(normalize)和正交化 (orthogonalize),对四元数规范化更容易

e.与旋转矩阵类似,两个四元组相乘可表示两次旋转

49.请简述OnBecameVisible及OnBecameInvisible的发生时机,以及他们执行的意义?

当renderer(渲染器)在任何相机上都不可见时调用:OnBecameInvisible

当renderer(渲染器)在任何相机上可见时调用:OnBecameVisible

50.动画层(Animation Layers)的作用是什么?

动画层作为一个具有层级动画编辑概念的工具,可以用来制作和处理任何类型的动画

52.请说出4种面向对象的设计原则,并分别简述它们的含义。

1) 单一职责原则 (The Single Responsiblity Principle,简称SRP):一个类,最好只做一件事,只有一个引起它的变化.

2) 开放-封闭原则 (The Open-Close Principle,简称OCP):对于扩展是开放的,对于更改是封闭的

3) Liskov 替换原则(The Liskov Substitution Principle,简称LSP):子类必须能够替换其基类

4) 依赖倒置原则(The Dependency Inversion Pricinple,简称DIP):依赖于抽象

5) 接口隔离原则 (The Interface Segregation Principle,简称ISP):使用多个小的专门的接口,而不要使用一个大的总接口。

53.Material和Physic Material区别?

PhysicMaterial 物理材质:物理材质描述,如何处理物体碰撞(摩擦,弹性)。

Material材质(材质类)为了获得一个对象使用的材质,可以使用 Renderer.materia属性:

54.法线贴图 、CG动画

A.法线贴图:是在原物体的凹凸表面的每个点上均作法线,通过RGB颜色通道来标记法线的方向,你可以把它理解成与原凹凸表面平行的另一个不同的表面,但实际上它又只是一个光滑的平面。

B.CG动画:原为Computer Graphics的英文缩写。随着以计算机为主要工具进行视觉设计和生产的一系列相关产业的形成,国际上习惯将利用计算机技术进行视觉设计和生产的领域通称为CG。它既包括技术也包括艺术,几乎囊括了当今电脑时代中所有的视觉艺术创作活动,如平面印刷品的设计、网页设计、三维动画、影视特效、多媒体技术、以计算机辅助设计为主的建筑设计及工业造型设计等。

NGUI(NUGUI1、NGUI2)

55、NGUI Button怎样接受用户点击并调用函数,具体方法名称是什么

a、直接监听事件

把下面脚本直接绑定在按钮上,当按钮点击时就可以监听到,这种方法不太好很不灵活。

56、请描述游戏动画有哪几种,以及其原理。

主要有关节动画、单一网格模型动画(关键帧动画)、骨骼动画。 a、关节动画把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整体的动画,角色比较灵活Quake2([kwe?k]vi.发抖,颤抖;)中使用了这种动画;b、 单一网络模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。 c、骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,由关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观。皮肤网格每一个顶点都会受到骨骼的影响,从而实现完美的动画

57、下面哪种做法可以打开Unity的Asset Store

Windows -> Asset Store

58、Mecanim系统中,Body Mask的作用是?

指定身体的某一部分是否参与渲染

59、以下哪种操作步骤可以打开Unity编辑器的Lightmapping视图?

Windows --> Lightmapping

60、关于光照贴图

A:使用光照贴图比使用实时光源渲染要快 B:可以降低游戏内存消耗 C、多个物体可以使用同一张光照贴图

61、关于Vector3的API,以下说法正确的是?

Vector3.forward与Vector3(0,0,1)是一样的意思;

62、 以下哪个函数在游戏进入新场景后会被马上调用?

MonoBehaviour.OnLevelWasLoaded

63、 什么是导航网格( NavMesh)?

一种用于实现自动寻路的网格

64、什么是局部坐标,什么是世界坐标?

世界坐标是不会变的,一直以世界坐标轴的XYZ为标准。局部坐标其实就是自身的坐标,会随着物体的旋转而变化的。

65、itween插件的作用是什么,itween作用于世界坐标还是局部坐标,请列举出3个其常用方法?

iTween是一个动画库,作者创建它的目的就是最小的投入实现最大的产出。让你做开发更轻松,用它可以轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等“

方法:a、MoveTo 物体移动 ;b、ColorTo:随着时间改变对象的颜色组; c、LookTo:随时间旋转物体让其脸部朝向所提供的Vector3或Transform位置

66、请简述NGUI中Panel和Anchor的作用

Anchor包含UIAnchor脚本。UIAnchor的功能是把对象锚定在屏幕的边缘(左上,左中,左下,上,中,下,右上,右中,右下),或缩放物体使其匹配屏幕的尺寸

Panel对象有UIPanel脚本,UIPanel是一个容器,它将包含所有UI小部件,并负责将所包含的部件组合优化,以减少绘制命令的调用。

67、Unity摄像机有几种工作方式,分别是什么?

68、LayerMask.NameToLayer()这个方法有什么作用?

LayerMask的使用是按位操作的,LayerMask.NameToLayer("Players") 返回该Layer的编号。

69、请描述MeshRender中material和shader的区别?

Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)

Shader大体上可以分为两类:表面着色器(Surface Shader) 、片段着色器(Fragment Shader)

70、什么是矢量图

矢量图:计算机中显示的图形一般可以分为两大类——矢量图和位图。矢量图使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。例如一幅花的矢量图形实际上是由线段形成外框轮廓,由外框的颜色以及外框所封闭的颜色决定花显示出的颜色。由于矢量图形可通过公式计算获得,所以矢量图形文件体积一般较小。矢量图形最大的优点是无论放大、缩小或旋转等不会失真;最大的缺点是难以表现色彩层次丰富的逼真图像效果。

71、Unity 连接数据库

需要得到Mono.Data.Sqlite.dll 文件与System.Data.dll文件

72、四元组是什么?

所谓四元数,就是把4个实数组合起来的东西。4个元素中,一个是实部,其余3个是虚部。

数据结构和算法很重要,图形学也很重要!
大的游戏公司很看重个人基础、综合能力;
小公司看你实际工作能力,看你的Demo。

高频问答的问题
A:委托与事件什么?
所谓委托就是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If … Else(Switch)语句,同时使得程序具有更好的可扩展性。可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用其所绑定的方法。
【事件的本质就是对消息的封装,用作对象之间的通信;发送方叫事件发送器,接收方叫事件接收器】

【B:能用foreach遍历访问的对象需要实现什么接口或声明什么方法的类型】
答案:能用foreach遍历访问的对象必须是集合或数组对象,而这些都是靠实现超级接口IEnumerator或被声明 GetEnumerator 方法的类型
问:但是我在平常使用foreach in 的时候都是直接用的呀,也没出什么问题呀。请问,这是为什么呢。 如果按题目中问的那样去实现超级接口IEnumerator或被声明 GetEnumerator 方法的类型,应该怎样去做呢? 谢谢
答:平常使用foreach in 的时候都是用的系统定义好的集合类(实现ICollection接口)。比如 arrayList,stringDictionary ,数组等。这些是平台封装好的,已近实现了IEnumerator 接口了。要让自己写的类也能时候foreach 就必须 在编写类的时候实现该接口。这样就可以事后foreach遍历了。比如 定义一个 people 的类,实现了IEnumerator接口。有一个数组 People[] tempPeople ,那么 就可以用: foreach( p in tempPeople){ console.writeline(p.name);}这样就免去了用for 循环的麻烦。

1.关于协同程序说法正确的是:(   )
A. 协同程序,即在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行。换句话说,开启协同程序就是开启一个线程。
C. 在[unity](http://www.manew.com)3D中,使用StopCoroutine(string methodName)来终止一个协同程序,使用StopAllCoroutines()来终止所有可以终止的协同程序,但这两个方法都只能终止该MonoBehaviour中的协同程序
D. 协同程序的返回类型为Coroutine类型。在[unity3d](http://www.manew.com)中,Coroutine类继承于YieldInstruction,所以,协同程序的返回类型只能为null、等待的帧数(frame)以及等待的时间
2. 对Mesh Renderer组件描述正确的是哪一项(   )
A.Mesh Renderer组件从Mesh Filter组件中获得网格信息,并根据物体的Transform组件所定义的位置进行渲染
B. Mesh Renderer组件决定了场景中游戏对象的位置,旋转和缩放
C. 为场景中的某一游戏对象增添物理的特性,需要为该游戏对象添加Mesh Renderer组件
D. Mesh Renderer是从网格资源中获取网格信息的组件
3. 当游戏中需要频繁创建一个物体对象时,我们需要怎么做来最大化节省内存
(   )
A. 异步加载
B. 动态加载动作
C. 对象池技术
D. 分步加载
4. if(go.CompareTag("Enemy"))和if(go.tag=="Enemy")两种判断方法说法错误的是:(   )
A. go.tag 一个标签可以用于识别一个游戏物体标签必须在使用之前在标签管理器里面先声明
B. 因为go.CompareTag 表示这个游戏物体是否被标识tag标签
C. go.tag 会在内部循环调用对象分配的标签属性以及拷贝额外的内存,推荐使用go.CompareTag("Enemy")来代替go.tag=="Enemy")
D. go.CompareTag("Enemy")与go.tag=="Enemy"都是比较标签,性能上没有区别,可以按自己的喜好来使用。
5. 当一个物体在视野内被其它物体遮挡,不希望对该物体进行渲染,可以通过以下哪一个模块实现该功能(  )
A. NavMesh
B. Light Probes
C. Occlusion Culling
D. Culling Mask
6. 下列选项错误的是(  )
A. 在[Unity3d](http://www.taidous.com/bbs/tag-name-Unity3d.html)中,GameObject 表示游戏对象
B. GameObject.Find方法的作用是通过对象名称查找游戏对象
C. GameObject.FindWithTag方法的作用是通过标签查找多个游戏对象
D. obj.Tranform.Translate方法的作用是对象平移
判断题:

7.在C#中,a.Equals(b) 和 a==b 完全是一样的

8.在C#中string[,]  strArray=new string[3,4]创建7个string对象

9.StringBuilder是可变字符串,string是不可变字符串

10.C#中:bool占1字节,byte占1字节,int占4字节,long占8字节

前面三题: A A C 4:C 5:A 6:C 7: 错 8 : 错 9: 对


Unity3d 程序员面试题  
1. 什么是渲染管道?渲染管道有哪些步骤? 
答:渲染管道是指程序为了在显示器上输出图像而经过的一系列必要操作. 渲染管道的步骤有: 
本地空间->世界空间->视图空间->背面剔除->光照计算->相机裁剪->投影计算->视口变换 ->光栅化  2. Unity3d有几种加载Prefab的方式? 
答: 1.静态引用,建一个public变量,在Inspector里把prefab拉上去,在场景运行时会自动加载,用的时候instantiate 
2.Resource.Load, 在调用该函数后加载, Load以后instantiate 3.AssetBundle.Load 在调用该函数后加载, Load以后instantiate  3. 什么是协同程序? 
答:在主线程序运行时同时开启另一段逻辑处理,来协助当前程序的执行.换名话说. 开启协程就象开启一个线程.  
4. 你例举几个你用过的Unity3d插件,并说明它们的用途和特点. 
 5. Unity3d中的碰撞器Collision和触发器Trigger的区别? 
答:碰撞器有碰撞效果, IsTrigger = false 在碰撞发生时会调用 OnCollisionEnter,OnCollisionStay,OnCollisionExit函数. 
触发器没有碰撞效果, IsTrigger = true, 可被触发时会调用 OnTriggerEnter,OnTriggerStay,OnTriggerExit函数  
6. 物体发生碰撞的必要条件 
答:两件物体都必须有碰撞组件(Collider),其中一物体还必须带有Rigidbody刚体组件  
7. 在物体发生碰撞的整个过程中,有几个阶段,不同阶段分别调用哪些函数 
答:1.OnCollisionEnter 2.OnCollisionStay 3.OnCollisionExit  
8. 在unity3D中有Update还有FixedUpdate,物理引擎的更新一般放在哪个系统函数里,为什
么? 
答:物理引擎的更新一般放在FixedUpdate里面,和Update不同,FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降.因为FixedUpdate是每固定帧绘制时执行一次,所以更适合做物理控制.  
9. 移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中? 
答:移动摄像机的动作应该放在LateUpdate函数中.在每帧执行完毕调用,它是在所有Update结束后才调用,比较适合用于命令脚本的执行.如果不是在所有Update执行完后就移动摄像机可能会出现摄像机移动了,视口里的内容还没有更新的空帧现象. 


       var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);    


10. 场景中有多个相机(Camera)时,怎么来设置多个相机的渲染顺序. 
答: Depth参数,设为-1会最先被渲染,值越大越后被渲染.  
11. LOD是什么, 优缺点是什么? 
答 : LOD 是Level Of Detail的缩写,是指的多层次细节技术,是最常用的游戏优化技术.它按照模型的位置和重要程度决定物体渲染的精细层度,从而降低非重要物体的在视口中的面数和细节度,来提高渲染运算的速度.  
12. 写出光照计算中的Diffuse的计算公式? 
答 : diffuse = Kd * colorLight *max(N . L, 0)  Kd漫反射系数,ColorLight光照的颜色, N物体表面单位法线向量, L由点指向光源的单位向量, 其中N与L为点乘,如果结果 小于等于0,则漫反射为0  
13. Vertex Shader是什么? 
答:顶点着色器  
14. MipMap是什么,作用? 
答:MIP map技术与材质帖图技术结合,根据距观看者远近距离的不同,以不同的分辨率将单一的材质帖图以多重图像的形式表现出来并代表平面纹理:尺寸最大的图像放在前面显著的位置,而相对较小的图像则后退到背景区域。每一个不同的尺寸等级定义成一个MIP map水平。MIP map技术帮助避免了不想要的锯齿边缘(称为锯齿状图形)在图像中出现,这种锯齿状图形可能是由于在不同分辨率下使用bit map图像产生的。  
15. 编辑器类Editor Classes 存放路径在哪里?和Runtime Classes运行时类有什么不同? 
答 :  存放路么在工程目录下的 Assets/Editor文件夹下.和运行时类不同的是,RuntimeClasses是用来开发最终产品的,使用RuntimeClasses开发的程序在软件发布后也可以运行, EditorClasses是用来对编辑器进行2次开发用的,可以用它开发一些自已的模块或工具,但在最终发布的程序中是不能使用的.   
16. 请简述向量的点乘,向量的叉乘以及向量的归一化的几何意义? 
答: 向量的点乘是计算两个向量之间的夹角的Cos值, 
   A,B向量的叉乘是计算垂直于由两个A,B两向量构成的平面的向量, 向量归一化,是指在空间坐标系内将向量的长度设为1.  

17. 机试: 多选 
1) 用鼠标实现在场景中拖动物体,用鼠标滚轮实现视口缩放(用一个Cube即可). 2) 用代码实现第三人称角色控制器 3) 实现吊机吊物体的功能 
 1.关于协同程序说法正确的是:(   )
A. 协同程序,即在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行。换句话说,开启协同程序就是开启一个线程。
C. 在[unity](http://www.manew.com)3D中,使用StopCoroutine(string methodName)来终止一个协同程序,使用StopAllCoroutines()来终止所有可以终止的协同程序,但这两个方法都只能终止该MonoBehaviour中的协同程序
D. 协同程序的返回类型为Coroutine类型。在[unity3d](http://www.manew.com)中,Coroutine类继承于YieldInstruction,所以,协同程序的返回类型只能为null、等待的帧数(frame)以及等待的时间
2. 对Mesh Renderer组件描述正确的是哪一项(   )
A.Mesh Renderer组件从Mesh Filter组件中获得网格信息,并根据物体的Transform组件所定义的位置进行渲染
B. Mesh Renderer组件决定了场景中游戏对象的位置,旋转和缩放
C. 为场景中的某一游戏对象增添物理的特性,需要为该游戏对象添加Mesh Renderer组件
D. Mesh Renderer是从网格资源中获取网格信息的组件
3. 当游戏中需要频繁创建一个物体对象时,我们需要怎么做来最大化节省内存
(   )
A. 异步加载
B. 动态加载动作
C. 对象池技术
D. 分步加载
4. if(go.CompareTag("Enemy"))和if(go.tag=="Enemy")两种判断方法说法错误的是:(   )
A. go.tag 一个标签可以用于识别一个游戏物体标签必须在使用之前在标签管理器里面先声明
B. 因为go.CompareTag 表示这个游戏物体是否被标识tag标签
C. go.tag 会在内部循环调用对象分配的标签属性以及拷贝额外的内存,推荐使用go.CompareTag("Enemy")来代替go.tag=="Enemy")
D. go.CompareTag("Enemy")与go.tag=="Enemy"都是比较标签,性能上没有区别,可以按自己的喜好来使用。
5. 当一个物体在视野内被其它物体遮挡,不希望对该物体进行渲染,可以通过以下哪一个模块实现该功能(  )
A. NavMesh
B. Light Probes
C. Occlusion Culling
D. Culling Mask
6. 下列选项错误的是(  )
A. 在[Unity3d](http://www.taidous.com/bbs/tag-name-Unity3d.html)中,GameObject 表示游戏对象
B. GameObject.Find方法的作用是通过对象名称查找游戏对象
C. GameObject.FindWithTag方法的作用是通过标签查找多个游戏对象
D. obj.Tranform.Translate方法的作用是对象平移
判断题:

7.在C#中,a.Equals(b) 和 a==b 完全是一样的

8.在C#中string[,]  strArray=new string[3,4]创建7个string对象

9.StringBuilder是可变字符串,string是不可变字符串

10.C#中:bool占1字节,byte占1字节,int占4字节,long占8字节

前面三题: A A C 4:C 5:A 6:C 7: 错 8 : 错 9: 对


Unity3d 程序员面试题  
1. 什么是渲染管道?渲染管道有哪些步骤? 
答:渲染管道是指程序为了在显示器上输出图像而经过的一系列必要操作. 渲染管道的步骤有: 
本地空间->世界空间->视图空间->背面剔除->光照计算->相机裁剪->投影计算->视口变换 ->光栅化  2. Unity3d有几种加载Prefab的方式? 
答: 1.静态引用,建一个public变量,在Inspector里把prefab拉上去,在场景运行时会自动加载,用的时候instantiate 
2.Resource.Load, 在调用该函数后加载, Load以后instantiate 3.AssetBundle.Load 在调用该函数后加载, Load以后instantiate  3. 什么是协同程序? 
答:在主线程序运行时同时开启另一段逻辑处理,来协助当前程序的执行.换名话说. 开启协程就象开启一个线程.  
4. 你例举几个你用过的Unity3d插件,并说明它们的用途和特点. 
 5. Unity3d中的碰撞器Collision和触发器Trigger的区别? 
答:碰撞器有碰撞效果, IsTrigger = false 在碰撞发生时会调用 OnCollisionEnter,OnCollisionStay,OnCollisionExit函数. 
触发器没有碰撞效果, IsTrigger = true, 可被触发时会调用 OnTriggerEnter,OnTriggerStay,OnTriggerExit函数  
6. 物体发生碰撞的必要条件 
答:两件物体都必须有碰撞组件(Collider),其中一物体还必须带有Rigidbody刚体组件  
7. 在物体发生碰撞的整个过程中,有几个阶段,不同阶段分别调用哪些函数 
答:1.OnCollisionEnter 2.OnCollisionStay 3.OnCollisionExit  
8. 在unity3D中有Update还有FixedUpdate,物理引擎的更新一般放在哪个系统函数里,为什
么? 
答:物理引擎的更新一般放在FixedUpdate里面,和Update不同,FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降.因为FixedUpdate是每固定帧绘制时执行一次,所以更适合做物理控制.  
9. 移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中? 
答:移动摄像机的动作应该放在LateUpdate函数中.在每帧执行完毕调用,它是在所有Update结束后才调用,比较适合用于命令脚本的执行.如果不是在所有Update执行完后就移动摄像机可能会出现摄像机移动了,视口里的内容还没有更新的空帧现象. 


       var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);    


10. 场景中有多个相机(Camera)时,怎么来设置多个相机的渲染顺序. 
答: Depth参数,设为-1会最先被渲染,值越大越后被渲染.  
11. LOD是什么, 优缺点是什么? 
答 : LOD 是Level Of Detail的缩写,是指的多层次细节技术,是最常用的游戏优化技术.它按照模型的位置和重要程度决定物体渲染的精细层度,从而降低非重要物体的在视口中的面数和细节度,来提高渲染运算的速度.  
12. 写出光照计算中的Diffuse的计算公式? 
答 : diffuse = Kd * colorLight *max(N . L, 0)  Kd漫反射系数,ColorLight光照的颜色, N物体表面单位法线向量, L由点指向光源的单位向量, 其中N与L为点乘,如果结果 小于等于0,则漫反射为0  
13. Vertex Shader是什么? 
答:顶点着色器  
14. MipMap是什么,作用? 
答:MIP map技术与材质帖图技术结合,根据距观看者远近距离的不同,以不同的分辨率将单一的材质帖图以多重图像的形式表现出来并代表平面纹理:尺寸最大的图像放在前面显著的位置,而相对较小的图像则后退到背景区域。每一个不同的尺寸等级定义成一个MIP map水平。MIP map技术帮助避免了不想要的锯齿边缘(称为锯齿状图形)在图像中出现,这种锯齿状图形可能是由于在不同分辨率下使用bit map图像产生的。  
15. 编辑器类Editor Classes 存放路径在哪里?和Runtime Classes运行时类有什么不同? 
答 :  存放路么在工程目录下的 Assets/Editor文件夹下.和运行时类不同的是,RuntimeClasses是用来开发最终产品的,使用RuntimeClasses开发的程序在软件发布后也可以运行, EditorClasses是用来对编辑器进行2次开发用的,可以用它开发一些自已的模块或工具,但在最终发布的程序中是不能使用的.   
16. 请简述向量的点乘,向量的叉乘以及向量的归一化的几何意义? 
答: 向量的点乘是计算两个向量之间的夹角的Cos值, 
   A,B向量的叉乘是计算垂直于由两个A,B两向量构成的平面的向量, 向量归一化,是指在空间坐标系内将向量的长度设为1.
上一篇 下一篇

猜你喜欢

热点阅读