読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

Quaternionまとめ

Unityの角度を表現するためのQuaternion, Transformについてまとめる

Quaternion

Quaternion.LookRotation

public static Quaternion LookRotation(Vector3 forward, Vector3 upwards = Vector3.up)

方向ベクトル(forward)と、そのワールドでの上方向ベクトル(upwards)から、方向ベクトルを向くQuaternionを取得する関数

Quaternion.Angle

public static float Angle(Quaternion a, Quaternion b);

二つのQuaternion a, bから、その二つの回転の間の角度をfloatで返す関数

Quaternion.Slerp

public static Quaternion Slerp(Quaternion a, Quaternion b, float t);

二つのQuaternion(from, to)の球状線形補間を行う

Quaternion.FromToRotation

public static Quaternion FromToRotation(Vector3 fromDirection, Vector3 toDirection);

fromDirectionからtoDirectionへ回転するQuaternionを返す

Quaternion.identity

public static Quaternion identity;

回転していない単位Quaternionを返す、ワールド座標か親オブジェクトに追従

Transform

Transform.LookAt

public void LookAt(Transform target, Vector3 worldUp = Vector3.up);
public void LookAt(Vector3 worldPosition, Vector3 worldUp = Vector3.up);

targetの方向を向くようにオブジェクトを回転

Transform.Rotate

public void Rotate(Vector3 eulerAngles, Space relativeTo = Space.Self);
public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self);
public void Rotate(Vector3 axis, float angle, Space relativeTo = Space.Self);

回転角をオイラー角で指定、ローカル座標に基づいて回転

Transform.RotateAround

public void RotateAround(Vector3 point, Vector3 axis, float angle);

pointを中心として、軸axisでangleだけ回転させる

実際に物体の回転

左方向に向かって30度回転

    void Start () {
        vec = new Vector3 (0, -30, 0);

        transform.rotation *= Quaternion.Euler (vec);
        // Tansformでの指定
        // transform.Rotate (vec);
    }

Targetの方向を見る

    void Update () {
        diffPos = targetTransform.position - transform.position;
        transform.rotation = Quaternion.LookRotation (diffPos);

        // Transform ver
        // transform.LookAt(targetTransform.position);
    }

Targetの方向をゆっくりみる

    void Update () {
        diffPos = targetTransform.position - transform.position;

        transform.rotation = Quaternion.Slerp(
            transform.rotation,
            Quaternion.LookRotation(diffPos),
            Time.time * rspeed;
    }

unity-bu.booth.pm docs.unity3d.com docs.unity3d.com

広告を非表示にする