今天我们来谈谈关于Unity中的旋转。主要有三种方式。变换矩阵,四元数和欧拉角。
定义
Quaternion q = Quaternion.LookRotation(new Vector3(0,0.5,1)); Matrix4x4 rot = new Matrix4x4(); rot.SetTRS(new Vector3(0,0,0),q,new Vector3(1,1,1));
Matrix4x4 rot = new Matrix4x4(); rot.SetTRS(new Vector3(0,0,0),q,new Vector3(1,1,1)); Vector4 vy = rot.GetColumn(1); Vector4 vz = rot.GetColumn(2); Quaternion newQ = Quaternion.LookRotation(new Vector3(vz.x,vz.y,vz.z),new Vector3(vy.x,vy.y,vy.z));
常用的函数
function ToAngleAxis (out angle : float, out axis : Vector3) : void
绕axis轴旋转angle,创建一个旋转
static function Angle (a : Quaternion, b : Quaternion) : float
返回a和b两者之间的角度。
var eulerAngles : Vector3
返回表示旋转的欧拉角度。表示旋转的角度,绕z轴旋转euler.z度,绕x轴旋转euler.x度,绕y轴旋转euler.y度(这样的顺序)。
function SetFromToRotation (fromDirection : Vector3, toDirection : Vector3) : void
把物体的fromDirection旋转到toDirection
function SetLookRotation (view : Vector3, up : Vector3 = Vector3.up) : void
建立一个旋转使z轴朝向view y轴朝向up
static function Slerp (from : Quaternion, to : Quaternion, t : float) : Quaternion
从from 转换到to,移动距离为t
static function Lerp (a : Quaternion, b : Quaternion, t : float) : Quaternion
跟Slerp相似,且比Slerp快,.但是如果旋转角度相距很远则会看起来很差
比较