この記事について
この記事では Transform.rotation を使ってオブジェクトを回転させる方法を解説します。
Unityでは回転を「オイラー角」と「クォータニオン(Quaternion)」の2種類で扱うことができ、さらに「LookRotation」でターゲット方向を向かせることも可能です。
この記事でわかること
- transform.rotation で現在の回転を取得できる
- transform.eulerAngles → オイラー角(x,y,z°)で直感的に指定できる
- Quaternion.Euler() → クォータニオンを直感的に設定できる
- Rotate() → 相対的に回転できる
- Quaternion.LookRotation() → オブジェクトを指定方向へ向けられる
Transformとは?
Transformについては以下の記事を参考にしてください。
Transform.rotationをスクリプトで制御
Transform.rotationをの準備
まずはヒエラルキーで右クリックをして空のGameObjectとCubeを1つずつ用意します。
・「右クリック」→「Create Empty」
・「右クリック」→「3D Object」→「Cube」
作成できたらCubeを空のGameObjectの子オブジェクトにして、空のGameObjectのRotationを(45,200,-120)にしてください。
次にスクリプトを作成してCubeにアタッチしてください。

現在の回転を取得する
オブジェクトの回転を確認するには「transform.rotation」または「transform.eulerAngles」を使います。
- Quaternion → 内部的な回転表現(精度が高いが直感的には分かりづらい)
- eulerAngles → x, y, z の角度(「度」単位)で分かりやすい(正の数)
using UnityEngine;
public class Transform_rotation : MonoBehaviour
{
void Start()
{
Quaternion rot = transform.rotation;
Debug.Log("現在の回転(Quaternion): " + rot);
Vector3 euler = transform.eulerAngles;
Debug.Log("オイラー角: " + euler);
}
}
実行してみると、どちらも親オブジェクトで設定した回転角度と異なりますね。
説明したいところですが、完全な理解をしていないため省略します。オイラー角は「ジンバルロック」に注意、クォータニオンは「回転の指定」を覚えれば取得することは少ないかと思います。
eulerAngles(オイラー角)で回転を変更する
直感的に「90°回転」と指定するなら「transform.eulerAngles」を使います。
※ここからは分かりにくいので親オブジェクトのRotationを(0,0,0)にしておきます。
using UnityEngine;
public class Transform_rotation : MonoBehaviour
{
void Start()
{
// X軸を90°回転
transform.eulerAngles = new Vector3(45, 0, 0);
}
}
実行してみると、回転がVector3に合わして回転しましたね。ただしオイラー角は「ジンバルロック」と呼ばれる問題を起こすことがあるので注意しましょう。
Quaternion(クォータニオン)で回転を指定する
Unity内部では回転は Quaternion(クォータニオン) で表現されています。
直感的に使う場合は「Quaternion.Euler(x,y,z)」を利用するのが一般的です。
using UnityEngine;
public class Transform_rotation : MonoBehaviour
{
void Start()
{
// Y軸を45°回転
transform.rotation = Quaternion.Euler(0, 45, 0);
Quaternion rot = transform.rotation;
Debug.Log("現在の回転(Quaternion): " + rot);
}
}
実行してみると、インスペクターでは(0,45,0)ですが、内部ではクォータニオンに変換されて保持されています。
相対的に回転させる(Rotate)
フレームごとに少しずつ回す場合は「Rotate()」を使います。
キャラクターやオブジェクトを常に回転させる処理に便利です。
using UnityEngine;
public class Transform_rotation : MonoBehaviour
{
void Update()
{
// Y軸を毎秒90°回転
transform.Rotate(0, 90 * Time.deltaTime, 0);
}
}
実行してみると、Y軸に対して回転してますね。
LookRotationでターゲット方向を向く
「LookRotation」は指定した方向を向く回転を生成する関数です。
※適当な空のCubeを作成してtargetにアタッチしておいてください。
using UnityEngine;
public class Transform_rotation : MonoBehaviour
{
[SerializeField] private Transform target;
void Update()
{
Vector3 dir = target.position - transform.position;
Quaternion lookRot = Quaternion.LookRotation(dir);
transform.rotation = lookRot;
}
}
実行してみると、CubeがCube1に向くことがわかりました。updateに入れているのでCube1を動かしてみてきちんと向いていることを確認しましょう。
LookRotationの注意点
- dir == Vector3.zero の場合はエラーになるのでチェックが必要
- 第2引数で「上方向」を指定できる → Quaternion.LookRotation(dir, Vector3.up)
まとめ
- transform.eulerAngles → オイラー角で直感的に指定
- Quaternion.Euler() → クォータニオンで正確に回転を制御
- Rotate() → 相対的な回転
- LookRotation() → ターゲット方向を向かせるのに便利