Unity入門

【Unity】Transformの使い方完全ガイド|WorldとLocalの違い・position/rotationの使い分け・座標変換まで解説

使用環境

・Unity Editor:2021.3.18f1

この記事でわかること

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

UnityでTransformを正しく使うには?

ピッグダディ

今日は「UnityのTransformの使い方」について解説するよ。
移動や回転、スケーリングを扱うとき、Transformの理解は絶対に欠かせないんだ。

ピッグボーイ

でも、「position」と「localPosition」の違いとか、
最初めちゃくちゃ混乱しました。親子関係があると特にわかりにくくて。

ピッグガール

私はワールド座標とローカル座標の変換でつまづきました。
TransformPointとかInverseTransformPointって、
どういうときに使えばいいんですか?

ピッグダディ

うんうん、それぞれにちゃんと意味があるからね。
この記事では、Transformの基本からposition/rotationの使い分け、座標変換テクニックまで、スクリプト付きでわかりやすく解説していくよ!

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

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

Unity World、Localの違いの画像

WorldとLocalのスクリプト比較

操作ワールドローカル
移動transform.positiontransform.localPosition
回転transform.rotationtransform.localRotation
拡縮transform.localScale

移動(position / localPosition)

World座標での移動(絶対移動)

//ワールド全体の座標基準で動かす
transform.position = new Vector3(0, 1, 0);

Local座標での移動(相対移動)

// 親の座標を基準として動かす
transform.localPosition = new Vector3(0, 0, 1);

回転(rotation / localRotation)

World回転(絶対回転)

// オブジェクトを Y 軸(上向き)に 90° 回転
transform.rotation = Quaternion.Euler(0, 90, 0);

Local回転(相対回転)

// 親の向きを基準に Y 軸 90° 回転
transform.localRotation = Quaternion.Euler(0, 90, 0);

拡縮(localScale)

LocalScale:親の影響を受けたスケーリング

// 直接スケールを 2 倍にする(親の影響なし)
transform.localScale = new Vector3(2, 2, 2);

座標変換のテクニック

ローカル → ワールド:TransformPoint()

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

ワールド → ローカル:InverseTransformPoint()

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

まとめ

・position / rotationはワールド基準
・localPosition / localRotation / localScaleは親オブジェクト基準
・TransformPointでローカル座標をワールドに変換
・InverseTransformPointでワールド座標をローカルに変換

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