Unity Quaternion用法小結

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角方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章