この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 両方とも前のリビジョン 前のリビジョン | |||
|
wiki:unity:tips:093 [2015/01/06 14:17] step |
— (現在) | ||
|---|---|---|---|
| ライン 1: | ライン 1: | ||
| - | ====== 093 Quaternionによる任意軸回転 ====== | ||
| - | |||
| - | ===== 概要 ===== | ||
| - | Quaternionとは、XYZで軸を決めてWで捻る(ひねる)代物。 | ||
| - | |||
| - | <code csharp> | ||
| - | private Quaternion m_qBaseQuat; | ||
| - | private GameObject m_Target; | ||
| - | |||
| - | void Start() | ||
| - | { | ||
| - | m_qBaseQuat = gameObject.transform.rotation; | ||
| - | } | ||
| - | |||
| - | |||
| - | void OnUpdate() | ||
| - | { | ||
| - | 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); | ||
| - | } | ||
| - | } | ||
| - | </code> | ||
| - | |||
| - | 例えばこれだと、m_qBaseQuatに起動時のQuaternionを保存しておいて、m_qBaseQuatから相対的にm_Target(標的)の向かって捻ることになる。 | ||
| - | キャラを振り向かせたり、2Dのミニマップとかで表示する矢印とかに使える。 | ||