093 Quaternionによる任意軸回転

概要

Quaternionとは、XYZで軸を決めてWで捻る(ひねる)代物。

private Quaternion  m_qBaseQuat;
private GameObject  m_Target;
 
void Start()
{
	m_qBaseQuat = gameObject.transform.rotation;
}
 
 
void Update()
{
    if (m_Target != null)
    {
        Vector3 axisY = new Vector3(0, 1, 0);
        Vector3 dir = (m_Target.gameObject.transform.position - transform.position).normalized;
        float fRotY = Mathf.Atan2(-dir.y, dir.x);
        transform.rotation = m_qBaseQuat * Quaternion.AngleAxis( (fRotY * Mathf.Rad2Deg), axisY);
    }
}

例えばこれだと、m_qBaseQuatに起動時のQuaternionを保存しておいて、m_qBaseQuatから相対的にm_Target(標的)の向かって捻ることになる。 キャラを振り向かせたり、2Dのミニマップとかで表示する矢印とかに使える。