您的位置:首页 > 移动开发 > Unity3D

Unity3D面试题整合——第二部分及答案

2017-10-18 20:43 239 查看
第二部分

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

2.alpha blend 工作原理

3.写光照计算中的 diffuse 的计算公式

4.lod 是什么,优缺点是什么

5.两种阴影判断的方法工作原理

6.MipMap 是什么?作用?

7.用 u3d 实现 2d 游戏,有几种方式?

8.u3d 中碰撞器和触发器的区别?

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

10.CharacterController 和 Rigidbody 的区别

11.物体发生碰撞时,有几个阶段,分别对应的函数

12.u3d 中,几种施加力的方式,描述出来。

13.什么叫做链条关节

14.物体自旋转使用的函数叫什么

15.物体绕某点旋转使用函数叫什么

16.u3d 提供了一个用于保存读取数据的类,( playerPrefs ),请列出保存读取整形数据的函数

17.unity3d 提供了几种光源,分别是什么

18.unity3d 从唤醒到销毁有一段生命周期,请列出系统自己调用的几个重要方法。

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

20.移动相机动作在哪个函数里,为什么在这个函数里。

21.当游戏中需要频繁创建一个物体对象时,我们需要怎么做来节省内存。

22.一个场景放置多个 camera 并同时处于活动状态,会发生什么

23.简述 prefab 的用处和环境

24.如何销毁一个 UnityEngine.Object 以及其子类

25.为什么 u3d 会出现组件上数据丢失的情况

26.u3d 下如何安全的在不同工程迁移 asset 数据

答案区

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

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

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

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

骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,由关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观。皮肤网格每一个顶点都会受到骨骼的影响,从而实现完美的动画。(骨骼动画是由关节动画发展而来的,如今基本都使用骨骼动画来实现角色动画)

2.alpha blend 工作原理

实际显示颜色 = 前景颜色 Alpha/255 + 背景颜色 (255-Alpha)/255

3.写光照计算中的diffuse的计算公式

实际光照强度 I= 环境光 (Iambient) + 漫反射光 (Idiffuse) + 镜面高光 (Ispecular);

环境光: Iambient= Aintensity* Acolor; (Aintensity 表示环境光强度, Acolor 表示环境光颜色 )

漫反射光: Idiffuse = Dintensity*Dcolor*N.L;

(Dintensity 表示漫反射强度, Dcolor 表示漫反射光颜色, N 为该点的法向量, L 为光源向量 )

镜面反射光: Ispecular = Sintensity*Scolor*(R.V)^n;

(Sintensity 表示镜面光照强度, Scolor 表示镜面光颜色, R 为光的反射向量, V 为观察者向量, n 称为镜面光指数 )

4.lod是什么,优缺点是什么

LOD 技术即 Levels of Detail 的简称,意为多细节层次。 LOD 技术指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。

优点:可根据距离动态地选择渲染不同细节的模型

缺点:加重美工的负担,要准备不同细节的同一模型,同样的会稍微增加游戏的容量。

5.两种阴影判断的方法工作原理

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

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

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

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

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

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

shadow area= L ∩ S

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

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

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

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

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

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

5.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几个过程。

6.MipMap是什么?作用?

在三维计算机图形的贴图渲染中有一个常用的技术被称为 Mipmapping 。为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件 , 这样的贴图被称为 MIP map 或者 mipmap 。

7.用u3d实现2d游戏,有几种方式?

利用引擎自带的 GUI

把摄像机设为 Orthographic ,用面片作为 2d 元素

利用第三方插件: NGUI 、 2dToolkit

8.u3d中碰撞器和触发器的区别?

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

trigger 触发器没有碰撞效果, isTrigger = true, 可以调用 OnTriggerEnter/stay/exit 函数

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

物体 A 必须带有( collider+rigidbody )或者 CharacterController ,另一个物体也必须至少带有 collider

10.CharacterController和Rigidbody的区别

Rigidbody 具有完全真实物理的特性,而 CharacterController 可以说是受限的Rigidbody ,具有一定的物理效果但不是完全真实的。

11.物体发生碰撞时,有几个阶段,分别对应的函数

三个阶段, OnCollisionEnter/Stay/Exit 函数

12.u3d中,几种施加力的方式,描述出来

rigidbody.AddForce/AddForceAtPosition ,都是 rigidbody 的成员函数

13.什么叫做链条关节

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

14.物体自旋转使用的函数叫什么

transform.Rotate


15.物体绕某点旋转使用函数叫什么

transform.RotateAround


16.u3d提供了一个用于保存读取数据的类,(playerPrefs),请列出保存读取整形数据的函数

PlayerPrefs.SetInt 与 PlayerPrefs.GetInt


17.unity3d提供了几种光源,分别是什么

平行光: Directional Light

聚光灯: Spot Light

点光源: Point Light

区域光源: Area Light (只用于烘培)

18.unity3d从唤醒到销毁有一段生命周期,请列出系统自己调用的几个重要方法。

Awake –>OnEnable –> Start –> Update –> FixedUpdate –> LateUpdate –> OnGUI –> Reset –> OnDisable –> OnDestroy

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

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

20.移动相机动作在哪个函数里,为什么在这个函数里。

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

21.当游戏中需要频繁创建一个物体对象时,我们需要怎么做来节省内存。

做一个 pool ,游戏开始时预先实例化足够的数量,然后用的时候取不用的时候收回

22.一个场景放置多个camera并同时处于活动状态,会发生什么

实际看到的画面由多个 camera 的画面组成,由 depth 、 Clear Flag 、 Culling Mask都会影响最终合成效果。

23.简述prefab的用处和环境

在游戏运行时实例化, prefab 相当于一个模版,对你已有的素材、脚本、参数做一个默认配置,以便于以后修改,同时 prefab 打包的内容简化了导出的操作,便于团队的交流。

24.如何销毁一个UnityEngine.Object以及其子类

Destroy

25.为什么u3d会出现组件上数据丢失的情况

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

26.u3d下如何安全的在不同工程迁移asset数据

方法 1 ,可以把 assets 目录和 Library 目录一起迁移,

方法 2 ,导出包

方法 3 ,用 unity 带的 assets server 功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity 面试题