【Unity】Eulerメソッドとは?オイラー角からQuaternionを作成できるメソッド

Eulerメソッドとは? Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「UnityのEulerメソッドってなに?」

「Eulerメソッドはどうやって使えばいいの?」

というお悩みの方に向けた内容となっています。

Unityでは、オブジェクトの回転や向きに関して、内部でQuaternionという構造体を使って管理しています。

このQuaternionを作る際に、X軸・Y軸・Z軸における角度(オイラー角)を指定してQuaternionを作成できるのが、Eulerメソッドになっています。

Eulerメソッドを使うことで、それぞれの軸に対して特定の角度で回転させるといったQuaternionを作成することができます。

そこで、このページでは、UnityのEulerメソッドについて、どんなメソッドなのか、また使い方までをまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

Euler(オイラー)メソッドとは?

Eulerメソッドとは、冒頭でも解説した通り、X軸・Y軸・Z軸のオイラー角を指定して、その回転におけるQuaternionを作成できるメソッドです。

3Dなどのオブジェクトの回転を表す場合によく使われる仕組みとして、Quaternionオイラー角の2つの方法があります。

Quaternionというのは、4つの数字(x,y,z,w)を使ってオブジェクトの回転を表すための仕組みで、UnityではこのQuaternionが採用されています。

このQuaternionは、回転処理におけるジンバルロックというデメリットを解消することができますが、直接角度を指定するものでは無いため、非常に理解しにくいものになっています。

なお、Quaternionが分からない方は、以下のページも参考にしてみてください。

一方で、オイラー角とは、オブジェクトの回転をX軸・Y軸・Z軸における角度で表すもので、Quaternionとは違い直接角度を使って表すため、非常に分かりやすい仕組みになっています。

そしてEulerメソッドとは、このオイラー角で指定した回転をQuaternionで作成して、Unityで回転処理を行える形に変換することができるメソッドです。

例えば、オブジェクトをX軸に30度、Y軸に45度回転させたいという場合、Eulerメソッドでこの回転量をQuaternionで作成して、オブジェクトのTransform.rotationに掛け合わせることで、回転処理を行うことができます。

なお、Eulerメソッドは前述の通り、オイラー角をQuaternionに変換する処理を行いますが、反対にQuaternionからオイラー角に変換する場合は、TransformコンポーネントのeulerAnglesという変数が準備されています。

Euler(オイラー)メソッドの使い方

ここからは、Eulerメソッドの使い方について紹介していきます。

Eulerメソッドの記述方法

Eulerメソッドは、Quaternionの構造体で定義されているメソッドで、以下のように記述することで、その回転量をQuaternion型の値で返します。

Quaternion.Euler(euler);

euler:回転量(Vector3型)

引数に、Vector3型回転量(オイラー角)を指定することで、Quaternion型に変換された値が返されます。

もしくは、

Quaternion.Euler(x, y, z);

x:X軸における角度(float型)
y:Y軸における角度(float型)
z:Z軸における角度(float型)

と記述することで、それぞれの軸に対する角度を直接指定して、Quaternionを作成することができます。

Eulerメソッドで回転処理を作る

実際に、UnityでEulerメソッドを使った回転処理を作ってみます。

ここでは、以下のキューブのオブジェクトをシーン内に配置して、スペースキーを押したら回転するという処理を作ってみます。

オブジェクトに対して、以下のスクリプトをアタッチしておきます。

using UnityEngine;

public class Test : MonoBehaviour
{
    Quaternion rotation;    // 回転させたいQuaternion

    void Start()
    {
        this.rotation = Quaternion.Euler(0.1f, 0.2f, 0.5f); // オイラー角からQuaternionを作成
    }
    void Update()
    {
        // スペースキーを押した場合
        if (Input.GetKey(KeyCode.Space))
        {
            transform.rotation = this.rotation * transform.rotation;    // 回転処理を行う
        }
    }
}

Startメソッドの中の9行目で、Eulerメソッドを使って指定した角度からQuaternionを作成する処理を行って、変数に代入しています。

そして、スペースキーを押した場合の16行目で、自身のrotationに対して、先ほど作成したQuaternionを掛けわせて、回転させる処理を行っています。

これでゲームを実行してみると、

スペースキーを押したら、オブジェクトが回転するようになりました。

まとめ

このページでは、UnityのEulerメソッドについて、どんなメソッドなのか、また使い方までをまとめていきましたが、いかがでしたでしょうか?

Eulerメソッドとは、オイラー角を指定してQuaternionを作成できるメソッドで、オブジェクトの回転を角度で指定できるようになります。

Unityでは、回転処理はQuaternionの仕組みが使われているので、Eulerメソッドを使うことで、直接角度を指定することができ非常に便利です。

また、反対にQuaternionからオイラー角を取得する場合は、eulerAnglesの変数を使用することで、角度を取得することができます。

最後までお読みいただきまして、ありがとうございました!

コメント