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

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