在网络上搜到的一些Unity笔试题,下面解答部分为本人从新编写的,但愿帮到你们!安全
1.请描述游戏动画有哪几种,以及其原理。网络
主要有关节动画、单一网格模型动画(关键帧动画)、骨骼动画。app
关节动画把角色分红若干独立部分,一个部分对应一个网格模型,部分的动画链接成一个总体的动画,角色比较灵活Quake2中使用了这种动画。ide
单一网络模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,而后插值运算实现动画效果,角色动画较真实。函数
骨骼动画,普遍应用的动画方式,集成了以上两个方式的优势,骨骼按角色特色组成必定的层次结构,由关节相连,可作相对运动,皮肤做为单一网格蒙在骨骼以外,决定角色的外观。皮肤网格每个顶点都会受到骨骼的影响,从而实现完美的动画。(骨骼动画是由关节动画发展而来的,现在基本都使用骨骼动画来实现角色动画)优化
2.alpha blend 工做原理动画
实际显示颜色 = 前景颜色*Alpha/255 + 背景颜色*(255-Alpha)/255spa
3.写光照计算中的diffuse的计算公式插件
实际光照强度 I= 环境光(Iambient) + 漫反射光(Idiffuse) + 镜面高光(Ispecular);3d
环境光: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游戏,有几种方式?
1.利用引擎自带的GUI
2.把摄像机设为Orthographic,用面片做为2d元素
3.利用第三方插件: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提供了几种光源,分别是什么
共4种,Directional Light、Point Light、Spot 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功能