この文書の現在のバージョンと選択したバージョンの差分を表示します。
次のリビジョン | 前のリビジョン | ||
wiki:unity:tips:093 [2014/12/28 09:33] 127.0.0.1 外部編集 |
wiki:unity:tips:093 [2015/02/23 12:47] (現在) |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== 093 Quaternionによる任意軸回転 ====== | + | [[http://stepism.sakura.ne.jp/unity/wiki/|Unityはこちらに移動しました。]] |
- | + | ||
- | ===== 概要 ===== | + | |
- | 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のミニマップとかで表示する矢印とかに使える。 | + |