Euler
public static Quaternion Euler(float x, float y, float z);
public static Quaternion Euler(Vector3 euler);
public static Quaternion Euler(Vector3 euler);
功能: 返回Quaternion对应的欧拉角
例子:
public class ExampleClass : MonoBehaviour {public Quaternion rotation = Quaternion.Euler(0, 30, 0);
}public class ExampleClass : MonoBehaviour {public Quaternion rotation = Quaternion.Euler(new Vector3(0, 30, 0));
} ToAngleAxis 返回物体的旋转角度信息
public void ToAngleAxis(out float angle, out Vector3 axis);
参数: angle 旋转的角度
axis 旋转轴,不一定是x,y,z轴
AngleAxis 创建围绕轴旋转某个角度的四元数
public static Quaternion AngleAxis(float angle, Vector3 axis);参数: angle 旋转的角度
axis 旋转轴,不一定是x,y,z轴
例子:
如果我们想使a,b两物体的旋转一样,可以这么做
public class ToAngleAxis : MonoBehaviour {// Use this for initializationprivate float angle = 0.0F;private Vector3 axis = Vector3.zero;public GameObject a;public GameObject b;void Start () {a.transform.rotation.ToAngleAxis(out angle, out axis);b.transform.rotation = Quaternion.AngleAxis(angle, axis);}
} SetLookRotation 设置Quaternion实例的朝向
public void SetLookRotation(Vector3 view, Vector3 up = Vector3.up)
参数: view 朝向的向量
up 向上的方向
例子:我们使一个物体朝向另一个物体
代码:
public class SetLookRotation: MonoBehaviour {public Transform target;void Start() {Vector3 relativePos = target.position - transform.position;Quaternion rotation = Quaternion.identity;rotation.SetLookRotation(relativePos,transform.up);transform.rotation = rotation;}
} LookRotation 设置Quaternion实例的朝向
public static Quaternion LookRotation(Vector3 forward, Vector3 upwards = Vector3.up);
参数: forward 朝向的向量
up 向上的方向
public class LookRotation : MonoBehaviour {public Transform target;void Start() {Vector3 relativePos = target.position - transform.position;Quaternion rotation = Quaternion.LookRotation(relativePos);transform.rotation = rotation;}
} 效果
SetFromToRotation
public void SetFromToRotation(Vector3 fromDirection, Vector3 toDirection);功能: 用于创建从fromDirection到toDirection的rotation。设有以下代码:
Quaternion q1 = Quaternion.identity;
q1.SetFromToRotation(v1,v2);
transform.rotation = q1;
则相当于将GameObject对象进行如下变换: 首先将GameObject对象自身坐标系的x,y,z轴方向
和世界坐标系的x,y,z轴方向一致, 然后将GameObject对象自身坐标系中向量v1指向的方向旋转到v2方向。
FromToRotation
和 SetFromToRotation功能一样,只是用法不一样
Lerp 线性插值
public static Quaternion Lerp(Quaternion a, Quaternion b, float t);
功能:返回从a到b的线性插值,该方法速度比Slerp快
例子:
我们创建两个Cube,使其中一个Cube的朝向(z轴方向)指向另一个Cube
代码:
public class t_Quaternion_Slerp : MonoBehaviour {public Transform to;public float speed = 0.1F;Vector3 targetVector;Quaternion targetQuaternion = Quaternion.identity;void Start() {targetVector = to.position - transform.position;targetQuaternion = Quaternion.LookRotation(targetVector);}void Update(){transform.rotation = Quaternion.Lerp(transform.rotation, targetQuaternion,Time.deltaTime);}
} 效果:
Slerp 球面插值
public static Quaternion Slerp(Quaternion a, Quaternion b, float t);



![Unity3D - 详解Quaternion类[转载]](https://img-blog.csdnimg.cn/c483c41d74754e688620c250ec1ef653.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1bmhhbzUyMTExMQ==,size_16,color_FFFFFF,t_70#pic_center)












