見出し画像

【Unity初心者向け】オブジェクトの回転① | Transform Rotationでオブジェクトを回転させる

Unityでゲームを作っていると、オブジェクトを移動させるだけでなく、

  • キャラクターの向きを変える

  • 車を曲がらせる

  • プロペラを回す

  • アイテムをくるくる回転させる

といった「オブジェクトを回転させる処理」もよく使います。
Unityでは、オブジェクトの位置だけでなく、回転も Transform で管理されています。

今回は、Transform の Rotation を使って、オブジェクトを回転させる基本を確認していきましょう。


1.Transformは位置・回転・大きさを管理している

Unityでオブジェクトを選択すると、Inspectorに Transform コンポーネントが表示されます。

Transformには、主に次の3つの情報があります。

  • Position:オブジェクトの位置

  • Rotation:オブジェクトの回転

  • Scale:オブジェクトの大きさ

以前の記事で解説をした移動では、Position を変更してオブジェクトを動かしてきました。

今回解説する回転では、Rotation を変更します。
つまり、
・Positionを変えると場所が変わる
・Rotationを変えると向きが変わる


2.TransformのRotation

2-1.Rotationにはx,y,z がある

Rotationには、

  • X

  • Y

  • Z

の3つの値があります。
例えば Cube を使って確認してみましょう。
Inspector の Transform にある Rotation の値を変更すると、Cube の向きが変わります。

Xを変更した場合

X軸を中心に回転します。
Cubeが前後へ倒れるような動きになります。

Yを変更した場合

Y軸を中心に回転します。
Cubeが左右を向くように回転します。
3Dゲームでキャラクターの向きを左右に変える場合などによく使われます。

Zを変更した場合

Z軸を中心に回転します。
画面から見て、時計回り・反時計回りのような回転になります。
2Dゲームでは、Z軸を使ってオブジェクトを回転させることが多くあります。



2-2.Rotationの数値は角度として考える

Inspectorに表示されているRotationの値は、初めのうちは角度として考えると分かりやすいでしょう。

例えば、

  • 0°:回転していない状態

  • 45°:少し回転した状態

  • 90°:直角まで回転

  • 180°:反対向き

  • 270°:さらに回転

  • 360°:一周

となります。
360°回転すると、一周して元の向きに戻るため、見た目は0°と同じです。


3.スクリプトから回転角度を変更

3-1.任意の軸を指定した値にする

Rotation は、スクリプトから変更することもできます。

今回は、回転を分かりやすく扱える eulerAngles を使ってみす。
次のように書きます。

void Start()
{
    transform.eulerAngles = new Vector3(0, 45, 0);
}

このコードでは、

  • X:0°

  • Y:45°

  • Z:0°

という回転を設定しています。
つまり、Y軸を中心に45°回転します。

移動では、

transform.position

を使いましたが、回転角度を扱う場合は、

transform.eulerAngles

を使うことができます。


3-2.X・Y・Zの角度をまとめて指定

eulerAngles には、Vector3 を使って回転角度を指定します。

例えば、

new Vector3(30, 60, 90)

であれば、

  • X:30°

  • Y:60°

  • Z:90°

という意味になります。


位置を指定するときにも、

new Vector3(x, y, z)

を使いました。
回転でも同じように、

new Vector3(xの角度, yの角度, zの角度)

という形で3つの値をまとめて指定できます。


3-3.現在の角度に回転量を追加する

今度は、現在の角度に回転量を追加してみましょう。
回転量を加算するには、次のように書きます。

transform.eulerAngles += new Vector3(0, 10, 0);

+= は、現在の値に追加するという意味です。

例えば、現在のY角度が 30° だった場合、

transform.eulerAngles += new Vector3(0, 10, 0);

を実行すると、y軸方向に 10° 回転が加算され、40度の方向へを向きます。

移動でも、

transform.position += new Vector3(1, 0, 0);

のように、現在位置へ移動量を追加しました。
回転も基本的な考え方は同じです。


4.Updateを使って回転し続ける

4-1.eulerAnglesに回転量を加算し続ける

ここまでのコードでは、一度だけ回転角度を変更していました。
では、オブジェクトをずっと回転させたい場合はどうすればよいでしょうか。

Update() の中で少しずつ角度を追加します。

public float rotationSpeed = 90f;

void Update()
{
    transform.eulerAngles += new Vector3(
        0,
        rotationSpeed * Time.deltaTime,
        0
    );
}

Update() は、ゲーム中に繰り返し実行されます。

そのため、

transform.eulerAngles +=

で少しずつ角度を追加し続けると、オブジェクトが回転しているように見えます。


4-2.rotationSpeedで回転速度を変更する

今回のコードでは、

public float rotationSpeed = 90f;

という変数を用意しています。
この値を大きくすると、オブジェクトは速く回転します。
反対に、小さくするとゆっくり回転します。

public にしておけば、Inspectorから値を変更して、回転速度を簡単に調整できます。


4-3.Time.deltaTimeを掛ける理由

コードでは、

rotationSpeed * Time.deltaTime

としています。

Time.deltaTime を使わずに毎フレーム同じ角度を追加すると、パソコンの性能やフレームレートによって回転速度が変わってしまうことがあります。

Time.deltaTime を掛けることで、フレームレートの違いによる影響を受けにくくできます。

Time.deltaTime はこちらで詳しく説明しています。

今回の、

public float rotationSpeed = 90f;

という設定では、1秒間に約90°回転するというイメージになります。

例えば、

rotationSpeed = 360f;

なら、約1秒で一周します。


5.transform.rotationとの違いは?

Transformには、

transform.eulerAngles

だけでなく、

transform.rotation

というものもあります。

Unityでは回転そのものは Quaternion で管理されていますが、Inspectorでは人が理解しやすいようにX・Y・Zの角度として表示されています。
Unity内部では、このQuaternionを使って回転を扱っていますが、その角度をスクリプトから扱うのが transform.eulerAngles です。

Quaternion は、初心者にとって少し分かりにくい仕組みです。
今回のように、

  • Xを何度回転する

  • Yを何度回転する

  • Zを何度回転する

という形で回転を理解するときは、eulerAngles の方がイメージしやすいでしょう。

まずは、

回転にはX・Y・Zがあり、それぞれの角度を変更するとオブジェクトの向きが変わる

ということを理解できれば十分です。


12.今回のまとめ

今回は、Transformを使ってオブジェクトを回転させる基本を確認しました。


次回予告

次回は、Transformに用意されている回転用の命令、

transform.Rotate();

を使ってオブジェクトを回転させます。

eulerAngles を直接変更する方法との違いや、X・Y・Zのどの軸を中心に回転させるのかについても確認していきます。


こちらはUnity初心者向けの記事をテーマ別にまとめています。
▼ Unity初心者向け記事まとめはこちら


こちらのマガジン「ミニゲーム作成講座 全8回セット」でもシーンの切り替えなどを活用して、初心者でも知識ゼロから作れるミニゲーム作成講座を紹介しています。

さらにステップアップの「スマホで遊ぶジャンプゲーム 8回セット」のマガジンもぜひご活用ください。


ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

いいなと思ったら応援しよう!

ファイブボックス よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!