AngleAxis方法和SetAngleAxis方法
官方例子。
Before:
After:
Quaternion的靜態方法,是用來構造一個Rotation的。
分析:軸,如果設置爲Vector.Down,那麼單頭會向左側旋轉。
同理,Vector.right像下旋轉 Vector.Left像上旋轉。30如果傳負值,向反方向旋轉。這個方法,用於定義一個旋轉角。
LookRotation實現簡單的追蹤效果:
使用:Quaternion.LookRotation (成員函數)或 SetLookRotation方法(靜態函數)。
public Transform m_NextPoint;
Quaternion m_MyQuaternion;
float m_Speed = 1.0f;
void Start()
{
m_MyQuaternion = new Quaternion();
}
void Update()
{
transform.position = Vector3.Lerp(transform.position, m_NextPoint.position, m_Speed * Time.deltaTime);
m_MyQuaternion = Quaternion.LookRotation( m_NextPoint.position - transform.position );
transform.rotation = Quaternion.Lerp( transform.rotation, m_MyQuaternion, m_rotateSpeed * Time.deltaTime );
}
移動球的時候,子彈會漸進的旋轉,朝向球的方向,並追蹤。
記牢這兩個方法,基本夠用了。
加上這句:
transform.forward = new Vector3( transform.forward.x, 0, transform.forward.z );
可以讓子彈像一個平臺一樣,保持水平的追蹤物件。如果想做一個浮空島,一個蒸汽船平臺,用這種移動方式,是更加合適的。
FromToRotation,SetFromToRotation
計算的是旋轉量,而不是最終結果,這個我不經常使用。不細講了。
就算要做坦克世界那種操作方式,也只需要設置目標朝向(鼠標控制的,當前瞄準目標,通過射線Trace可以獲得。),然後移動即可,最常用的還是LookRotation函數。如果要做鎖定功能,稍微麻煩點,除了要旋轉炮臺,還需要考慮坦克的最大旋轉角和最大俯仰角。
什麼時候用Euler角更方便?
以前不熟悉Quaternion的使用,經常用Eular角做旋轉,很愚蠢。Euler角,在你序列化的時候,纔會用到。比如做一個生存遊戲的建築系統,需要記錄擺好的建築的旋轉朝向,用Euler角纔對。
否則即使你做一個2D遊戲,用Quaternion做旋轉也遠遠比Euler角方便。