1、layermask的作用
通过LayerMask.GetMask(“LayerName”),可以获得对应层的掩码(mask)。这样可以使得,如用摄像机投影射线时,求出其投影到指定层后的碰撞点。即可以指定碰撞器
2、Time.deltaTime的作用
官方解释是:你加上或者减去一个值,那你很可能应该乘以Time.deltaTime。当你乘以它以后,你实质上的表达是:我想让这个物体以每秒钟10米的速度移动而不是每帧10米。意思就是,Unity的帧率不一定相同,如果不乘deltaTime,则可能如:角色在某些场景或者某些主机中移动过快,有些又过慢。乘以这个数值后,每秒的移动速度就固定了。
3、GetAxis与GetAxisRaw的区别
在读取移动指令时,需要用GetAxisRaw,这样返回的值只有-1,0,1,如果用GetAxit,返回的是一个[-1,1]的区间,会造成人物移动时出现漂移的现象。
4、取得摄像头视线的焦点
Physics.Raycast (camRay, out floorHit, camRayLength, floorMask)
camRay是通过Camera.main.ScreenPointToRay(Input.mousePosition)计算鼠标落点和摄像机位置,得到的一条线段。
该线段长度为camRayLength,函数计算的是该线段与floorMask代表的层的交点,交点保存在floorHit里面
如果两者没有相交,则函数返回false,否则为true
5、计算旋转量用Quaternion的相关函数
Quaternion.LookRotation(Vector3 forward, Vector3 upwards = Vector3.up)
建立一个旋转,使z轴朝向forward y轴朝向upwards(默认upwards为Vector3.up)
6、使用Animator Controller时,动画不切换
记得在状态转移的属性里,把Has Exit Time这个框取消掉。选中了 Has Exit Time,如果上一个动画的播放时间有10s,选中了Has Exit Time在切换动画时,会等上一个动画播放完后才会播放下一个动画。
7、正交(Orthographic)摄像机
可以把摄像机设置为正交。正交摄像机与 Unity 3D 中普通摄像机相比没有透视效果(近大远小)
8、物体移动方式
如果有rigidbody组件,可以用MovePosition函数来移动。
如果是类似于摄像头这种,可以直接设定其transform.position来移动。
一般使用transform.position = Vector3.Lerp(A, B, fSmooth * Time.deltaTime)从A平滑地移动到B
这个函数返回一个位置,位于AB之间,第三个参数越大,离B点越近。
如果完全不需要考虑物理上的同步、移动平滑等,则直接用transform.Translate 即可。
9、canvas的效果
canvas的所有子对象都是不可交互的,因此如果将血条用slider对象表示并放在canvas下,那么即使不取消interactable选项用户也无法交互。
10、关闭组件与对象
使一个对象失效:.setActive = false
使一个组件失效:.enabled = false
11、collider与rigidbody
collider负责检测碰撞,rigidbody负责使物体能收到各种物理力量的作用
一般player需要设置rigidbody与collider两个属性,墙壁则只需要collider,用来检测是否和player或者敌人碰撞。