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