Unity3D学习实用技巧
- 基础知识汇总
- 1. Unity中的碰撞器和触发器的区别?
- 2. 物体发生碰撞的必要条件
- 3. 什么是协同程序
- 4. OnEnable、Awake、Start运行时发生的顺序?哪个可能在同一个对象周期中反复发生
- 5. MeshRender中material和Sharedmaterial 的区别?
- 6. Unity提供了几种光源,分别是什么区域光源
- 7. CharacterController和Rigidbody的区别:
- 8. 简述prefab的用处
- 9. Unity3d的物理引擎中,有几种施加力的方式
- 10. 什么叫链条关节
- 11. 物体自身旋转使用的函数
- 12. Unity3d提供了一个用于保存和读取数据的类(PlayerPrefs),列出保存和读取整型数据的函数:
- 13. Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,列出系统自带的几个重要方法。
- 14. 物理更新一般放在哪个系统函数里?
- 15. 在场景中放置多个Camera并同时处于活动状态会发生什么?
- 16. 如何销毁一个UnityEngine.Object及其子类?
- 17、MiniMap是什么?作用?
- 18、 向量的点乘、叉乘以及归一化的意义?
- 19、射线检测碰撞物的原理
- 20、四元数的作用,四元数对欧拉角的优点
- 21、什么是渲染管道
基础知识汇总
1. Unity中的碰撞器和触发器的区别?
碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性。当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器。
2. 物体发生碰撞的必要条件
两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody 刚体,而且必须是运动的物体带有Rigidbody脚本才能检测到碰撞。
3. 什么是协同程序
在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但不是多线程,Unity的写成是在每帧结束之后去检测yield的条件是否满足。换句话说,开启协程就是开启一个可以与程序并行的逻辑。可以用来控制运动、序列以及对象的行为。
update 函数返回后将运行正常协程更新。协程是一个可暂停执行 (yield) 直到给定的 YieldInstruction 达到完成状态的函数。
协程的不同用法:
yield 在下一帧上调用所有 Update 函数后,协程将继续。
yield WaitForSeconds 在为帧调用所有 Update 函数后,在指定的时间延迟后继续协程
yield WaitForFixedUpdate 在所有脚本上调用所有 FixedUpdate 后继续协程
yield WWW 在 WWW 下载完成后继续。
yield StartCoroutine 将协程链接起来,并会等待 MyFunc 协程先完成。
4. OnEnable、Awake、Start运行时发生的顺序?哪个可能在同一个对象周期中反复发生
Awake>OnEnable>Start,OnEnable在同一周期中可以反复地发生。
5. MeshRender中material和Sharedmaterial 的区别?
修改SharedMaterial将改变所有物体使用这个材质的外观,并且也改变存储在工程里的材质设置。不推荐修改由SharedMaterial返回的材质。
6. Unity提供了几种光源,分别是什么区域光源
Area Light聚光灯:
Spot Light点光源:
Point Light平行光:
Directional Light四种。
7. CharacterController和Rigidbody的区别:
Rigidbody具有完全真实物理的特性,Unity中物理系统最基本的一个组件,包含了常用的物理属性,而CharacterController可以说是受限的Rigidbody,具有一定的物理效果但不是完全真实的
8. 简述prefab的用处
在游戏运行时实例化,Prefab相当于一个模板,对你已经有的素材、脚本、参数做一个默认配置。
9. Unity3d的物理引擎中,有几种施加力的方式
rigidbody.AddForce/AddForceAtPosition
10. 什么叫链条关节
Hinge Joint ,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后会产生拉力
11. 物体自身旋转使用的函数
Transform.Rotate();
12. Unity3d提供了一个用于保存和读取数据的类(PlayerPrefs),列出保存和读取整型数据的函数:
PlayerPrefs.SetInt()、PlayerPrefs.GetInt()
13. Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,列出系统自带的几个重要方法。
Awake——>OnEnable–>Start——>Update——>FixedUpdate——>LateUpdate——>OnGUI——>OnDisable——>OnDestroy
14. 物理更新一般放在哪个系统函数里?
FixedUpdate,每固定帧绘制时执行一次,和Update不同的是FixedUpdate渲染帧执行,如果渲染效率低下时候,FiexedUpdate调用次数会下降。适用于物理引擎的计算。
15. 在场景中放置多个Camera并同时处于活动状态会发生什么?
游戏界面可以看到很多摄像机的混合。
16. 如何销毁一个UnityEngine.Object及其子类?
使用Destroy()方法
17、MiniMap是什么?作用?
MiniMapping 在三维计算机图形的贴图渲染中常用的技术,为加快渲染进度和减少图像锯齿,贴图被处理成一系列被预先计算和优化过的图片组成的文件。
18、 向量的点乘、叉乘以及归一化的意义?
1) 点乘描述了两个向量的相似程度,结果越大两向量越相似,还可以表示投影。
2)叉乘得到的向量垂直于原来的两个向量
3)标准化向量:用在只关心方向,不关心大小的时候。
19、射线检测碰撞物的原理
射线是3D世界中的一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,停止发射。
20、四元数的作用,四元数对欧拉角的优点
四元数用于表示旋转,相对于欧拉角的优点能够进行增量旋转,避免万向锁,给定方位的表达方式有两种,互为负。
21、什么是渲染管道
指在显示器上为了显示出图像而经过一系列必要操作。渲染管道中有很多步骤,都要将几何物体从一个坐标系变换到另一个坐标系中。主要步骤:本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化