Unity编辑器操作面试题集锦(上)
1.请描述游戏动画有几种,以及其原理。
答案:主要有关节动画、单一网格模型动画(关键帧动画)、骨骼动画。
关节动画把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整
体的动画,角色比较灵活 Quake2 中使用了这种动画。
单一网络模型动画由一个完整的网格模型构成, 在动画序列的关键帧里记录各个顶点的原位
置及其改变量,然后插值运算实现动画效果,角色动画较真实。
骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的
层次结构,由关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观。
皮肤网格每一个顶点都会受到骨骼的影响,从而实现完美的动画。(骨骼动画是由关节动画
发展而来的,如今基本都使用骨骼动画来实现角色动画)
2.物体发生碰撞的必要条件
答案:物体 A 必须带有(collider+rigidbody)或者 CharacterController,另一个物体也必须至少带有 collider。
3.GUI与UGUI的优点和缺点
答案:GUI不方便控制,UGUI所见即所得,方便控制。GUI使用在生命周期函数OnGUI中使用,脚本来书写控制。UGUI使用Canvas画布和事件系统。UGUI适应屏幕上比GUI简单。
4.一个场景放置多个carmera并同时处于活动状态,会发生什么
答案:实际看到的画面由多个 camera 的画面组成,由 depth、Clear Flag、Culling Mask 都会影响最终合成效果。
5.U3D 中用于记录节点空间几何信息的组件名称,及其父类名称
答案:Transform 父类是 Component。
6.请简述如何在不同分辨率下保持 UI 的一致性
答案:NGUI 很好的解决了这一点,屏幕分辨率的自适应性,原理就是计算出屏幕的宽高比跟原来的预设的屏幕分辨率求出一个对比值,然后修改摄像机的 size。
7.为什么 dynamic font 在 unicode 环境下优于 static font
答案:Unicode 是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。
使用动态字体时,Unity 将不会预先生成一个与所有字体的字符纹理。当需要支持亚洲语言
或者较大的字体的时候,若使用正常纹理,则字体的纹理将非常大。
8.Render 的作用?描述 MeshRender 和 SkinnedMeshRender 的关系与不同
答案:Mesh 就是指模型的网格(同名组件是用于调整网格属性的),MeshFilter 一般是用于获得模型网格的组件,而 MeshRender 是用于把网格渲染出来的组件
9.简述 SkinnedMesh 的实现原理
答案:Skinned Mesh 中文一般称作骨骼蒙皮动画.这种动画中包含骨骼( Bone )和蒙皮 (Skinned Mesh) 两个部分, Bone 的层次结构和关节动画类似, Mesh 则和关节动画不同:关节动画中是使用多个分散的 Mesh, 而 Skinned Mesh 中 Mesh 是一个整体,也就是说只有一个 Mesh, 实际上如果没有骨骼让 Mesh 运动变形, Mesh 就和静态模型一样了。Skinned Mesh 技术的精华在于蒙皮,所谓的皮并不是模型的贴图。而是 Mesh 本身,蒙皮是指将 Mesh 中的顶点附着(绑定)在骨骼之上,而且每个顶点可以被多个骨骼所控制,这样在关节处的顶点由于同时受到父子骨骼的拉扯而改变位置就消除了裂缝。可以理解为具有蒙皮信息的 Mesh 或可当做皮肤用的 Mesh ,这个皮肤就是 Mesh 。而为了有皮肤功能, Mesh 还需要蒙皮信息,即 Skin 数据,没有 Skin 数据就是一个普通的静态 Mesh 了。 Skin 数据决定顶点如何绑定到骨骼上。顶点的 Skin 数据包括顶点受哪些骨骼影响以及这些骨骼影响该顶点时的权重 (weight) ,另外对于每块骨骼还需要骨骼偏移矩阵 (BoneOffsetMatrix) 用来将顶点从 Mesh 空间变换到骨骼空间。
10.Prefab 的作用?如何在移动环境的设备下恰当地使用它?
答案:在游戏运行时实例化,prefab 相当于一个模版,对你已有的素材、脚本、参数做一个默认配置,以便于以后修改,同时 prefab 打包的内容简化了导出的操作,便于团队的交流。
11.如何销毁一个 UnityEngine.Object 及其子类
答案:调用Destory()方法。
12.为什么 Unity3D 中会发生在组件上出现数据丢失的情况?
答案:组件上绑定的对象被删除了。
13.如何安全的在不同工程间安全地迁移 asset 数据?三种方法
答案:1.将 Assets 目录和 ProjectSetting 目录一起迁移。
2.导出包。
3.使用版本控制器Git/SVN。
14.MeshCollider 和其他 Collider 的一个主要不同点?
答案:Meshcollider 是基于顶点的。建议还是用 boxcollider,boxcollider 本身
是基于算法,没有面的概念。
15.当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?
答案:穿透(碰撞检测失败)(避免方法:碰撞体变大,FixedUpdate, 代码限制)
16.MeshRender 中 material 和 sharedmaterial 的区别?
答案:修改 sharedMaterial 将改变所有物体使用这个材质的外观,并且也改变储存在工程里的材质设置。
不推荐修改由 sharedMaterial 返回的材质。如果你想修改渲染器的材质,使用 material替代。
17.用 u3d 实现 2d 游戏,有几种方式?
答案:1.利用引擎自带的 GUI和2D系统。
2.把摄像机设为 Orthographic,用面片作为 2d 元素。
3.利用第三方插件:NGUI、2dToolkit。
18.u3d 中碰撞器和触发器的区别?
答案:1.collider 碰撞器会有碰撞的效果,IsTrigger = false,可以调用。
2.OnCollisionEnter/Stay/Exit 函数。
3.trigger 触发器没有碰撞效果,isTrigger = true,可以调用 OnTriggerEnter/stay/exit 函
数。
19.CharacterController 和 Rigidbody 的区别
答案:Rigidbody 具有完全真实物理的特性, 而 CharacterController 可以说是受限的 Rigidbody,具有一定的物理效果但不是完全真实的。
20.什么叫做链条关节
答案:Hinge Joint ,他可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。 (简单说就是弹簧).
21.unity3d 提供了几种光源,分别是什么
答案:平行光:Directional Light
聚光灯:Spot Light
点光源:Point Light
区域光源:Area Light(只用于烘培)
22.u3d 下如何安全的在不同工程迁移 asset 数据
答案:方法 1,可以把 assets 目录和 Library 目录一起迁移,
方法 2,导出包
方法 3,用 unity 带的 assets server 功能