Unity

【Unity】Transformの使い方を徹底解説

この記事について

この記事は私がゲーム制作・学習等で学んだ知識を元にTransformの使い方をわかりやすく説明していきます。

この記事でわかること

  • World(ワールド)とLocal(ローカル)の違い
  • Transformプロパティ(position / rotation / scale)の使い方と注意点
  • スクリプトによるTransform制御方法
  • TransformPointやInverseTransformPointの使い方

※Transformを使用するうえでVector3の知見は必ず必要になります。もし、まだ知見がない方は以下の記事を参考にしてください。

Transformとは?

Transform(トランスフォーム) は、Unityのすべての GameObject に必ず付いているコンポーネントで、オブジェクトの 位置(Position)・回転(Rotation)・拡縮(Scale) を管理します。

特徴

  • Position(座標)
    ワールド空間やローカル空間におけるオブジェクトの位置。
  • Rotation(回転)
    オブジェクトの向きを表す。EulerAngles(オイラー角)やQuaternion(クォータニオン)で制御可能。
  • Scale(拡縮)
    オブジェクトの大きさをX/Y/Z方向にどれだけ拡大・縮小するか。

World座標とLocal座標の違いとは?

Worldとは、シーンの基準となる点(0,0,0)からの絶対値のことです。
Localとは、親オブジェクトを基準とした基準系(相対値)のことです。
これらを適切に使い分けることで、複雑な階層構造やアニメーション、カメラ追従なども柔軟に制御できます。

Unity World、Localの違いの画像

インスペクターのTransform

Transformはインスペクターで確認・変更ができます。
※インスペクターで見えているTransformはすべてLocalです。World座標を表示するようにもできますが、結局理解しないといけないため、わざわざする必要はないかと思います。

Transformをスクリプトで制御

移動(position / localPosition)

transform.postionについては以下の記事を参考にしてください。

回転(rotation / localRotation)

transform.rotationについては以下の記事を参考にしてください。
※localRotaionはpositionやscaleと説明がかぶるため省略しています。

拡縮(localScale)

transform.localScaleについては以下の記事を参考にしてください。

座標変換のテクニック(Local ⇆ World)

Local → World:TransformPoint()

Vector3 worldPos = gameobject.transform.TransformPoint(gameobject.transform.localPosition);

World → Local:InverseTransformPoint()

Vector3 localPos = gameobject.transform.parent.InverseTransformPoint(gameobject.transform.position);

まとめ

・position / rotationはワールド基準
・localPosition / localRotation / localScaleはローカル基準
・TransformPointでローカル座標をワールドに変換
・InverseTransformPointでワールド座標をローカルに変換

Transformを正しく理解すれば、思い通りにキャラクター・カメラ・UIの動きを制御できます。