在Unity中,角度与旋转是一个比较复杂的事情,其实现方式也是有很多,但是使用的规则是比较复杂的,所以需要选择对应的方式来实现需要的效果
一、Unity角度的表示方式
在Unity中表示角度的方式主要有两种,四元数与欧拉角,两者的表示方式有很大的不同,需要深刻理解两者,才能更好的应用:
四元数(Quaternion):
- 四元数可用于表示
GameObject
的方向或旋转。该表示法内部包含四个数字(在Unity中称为x,y,z和w),但是这些数字并不表示角度或轴,因此通常不需要直接访问它们。除非您对四元数的数学特别感兴趣,否则您只真正需要知道四元数表示3D空间中的旋转,并且通常不需要知道或修改x,y和z属性欧拉角(EulerAngles):
- 欧拉角相对于四元数更加直观,可以直接看到旋转的角度,欧拉角的取值范围在0到360度,我们通常对于具体的角度的旋转使用欧拉加是简单方便的一种方式。
二、检查器(Inspector)面板Rotation
在我们创建一个3D物体时,Transfrom
组件上就会有Rotation
这个属性,Untiy官方手册解释为围绕X、Y或者Z轴进行的旋转,当我们在Sence
面板对物体进行旋转,同样就会在Transform
组件在看到数字的变化。反之,我们在面板调整数字,同样Sence
窗口物体也会做出旋转。
但是当我们在脚本调用Rotation
并输出,Debug输出发现与Tansform
组件中显示的数字并不相同,而是一个四元数,并且每个数字都是从-1到1,这是为什么呢。其实Rotation
并不是和检查面板显示的那样,Rotation
是一个四元数,而其数值的正负值往往代表的是旋转方向,而其数值大小0到1则对应0到180度的对应:
所以说,与其说在Transform
面板Rotation
是一个四元数,不如将其理解为欧拉角,这样便于直观的使用角度。
三、持续旋转
Rotate
持续旋转是比较常用的旋转方式,不注重旋转角度,更注重旋转的速度,比如车轮旋转、摩天轮旋转等等,这样的可以使用transform.Rotate()
来完成。而Rotate()
就相当于获取一个旋转速度
使用方式:
public void Rotate(Vector3 eulers, Space re