C#
Unity

Unity 回転周りについて

はじめに

この記事ではUnity(C#)における回転系ついてです。

インスペクター上の角度を取得するにはどうしたらいいの??

スクリーンショット 2017-11-04 0.42.32.png

ここのRotation部分の値を取得する時にはどうしたらいいのか。。
普段コードを書いている人、だったり勘がいい人は

Vector3 _Rotation = gameObject.transform.rotaion;

と思うかもしれませんがrotaionでの返り値はQuaternionであるためVector3には代入できません。
オイラー角(30度とか)を取得したいけどどうするか。。

Vector3 _Rotation = gameObject.transform.localEulerAngles;

でうまくいきます。

補足&まとめ

Unity ではオブジェクトの回転量を表す値にQuaternion(四元数)を使っています。
Quaternionの各要素の値は、私たちが慣れ親しんでいる角度(オイラー角)ではないので気をつけてください。Unity インスペクター上での回転量はオイラー角が使われていますが、内部では四元数が用いられています。

QuaternionからEulerへの変換する方法
スクリーンショット 2017-11-04 1.26.19.png

void Start () {
        Quaternion quaternion = this.transform.rotation;
        Debug.Log (quaternion);
        float x = quaternion.eulerAngles.x;
        float y = quaternion.eulerAngles.y;
        float z = quaternion.eulerAngles.z;
        Debug.Log (x);
        Debug.Log (y);
        Debug.Log (z);
    }

eulerAngles プロパティを通すことでオイラー角を取得することが可能です。↓
スクリーンショット 2017-11-04 1.27.00.png

Unity内部では四次元数を使って計算が行われているのでいちいちオイラー角に直してから計算すると負担がかかってくるので、出来れば四次元数を使いこなせるといいかもしれませんね。

追記:手取り早く回転させたい場合

この記事を読んでくださってる方はきっと回転させたいけどどうしたらいいの?って方も多いかと思います。とりあえず難しいことは置いておいて回転させたいって方は下のコードで回転を実装をすることができます。回転には色々と方法がありますが、使いやすいものを紹介します。

Rotateメソッドを使う

これはオイラー角を引数と取ります。
スクリーンショット 2017-12-23 23.32.48.png

rotationに代入する

こちらはクウォータ二オンをオイラー角に変換してから代入しています。
ちょっと一手間??
スクリーンショット 2017-12-03 21.59.43.png