Unityでオブジェクトを動かすとき、ワールド座標とローカル座標を適切に使い分けることが重要です。
- オブジェクトを親の位置を基準にして移動したい!
- 回転後のオブジェクトをローカル軸で移動したい!
transform.positionやtransform.localPositionを理解すると、正確なオブジェクト制御が可能になり、意図したとおりにキャラクターやカメラを動かすことができます! この
記事では、グローバル座標・ローカル座標の違い、移動・回転・スケールの設定方法、スクリプトでの操作方法まで詳しく解説します!
この記事でわかること
- WorldとLocalの違い
- 移動(position・localPosition)の使い分け
- 回転(rotation・localRotation)の使い分け
- スケール(Scale・localScale)の使い分け
Transformの使い方(World、Local)
Worldとは、シーンの基準となる点(0,0,0)からの絶対値のことです。
Localとは、親オブジェクトを基準とした基準系(相対値)のことです。

※ この他にも以下のサイトを参考にしてください。
World vs Localのスクリプトの書き方
操作 | ワールド | ローカル |
---|---|---|
移動 | transform.position | transform.localPosition |
回転 | transform.rotation | transform.localRotation |
拡縮 | transform.Scale | transform.localScale |
World座標とLocal座標の使い分け
World座標で移動(絶対移動)
//ワールド全体の座標基準で動かす
transform.position = new Vector3(0, 1, 0);
Local座標で移動(相対移動)
// 親の座標を基準として動かす
transform.localPosition = new Vector3(0, 0, 1);
World回転とLocal回転の使い分け
World角度で回転(絶対回転)
// オブジェクトを Y 軸(上向き)に 90° 回転
transform.rotation = Quaternion.Euler(0, 90, 0);
Local角度で回転(相対回転)
// 親の向きを基準に Y 軸 90° 回転
transform.localRotation = Quaternion.Euler(0, 90, 0);
Scaleの違い
親の影響なしにScaleを変更
// 直接スケールを 2 倍にする(親の影響なし)
transform.Scale = new Vector3(2, 2, 2);
親の影響を考慮した最終Scaleを取得
// スケールを 2 倍にする(親が2倍にしていたら絶対Scaleでは4倍することになる)
transform.localScale = new Vector3(2, 2, 2);
Transformの座標変換
TransformPoint()(ローカル座標 → ワールド座標)
Vector3 worldPos = gameobject.transform.TransformPoint(gameobject.transform.localPosition);
InverseTransformPoint()(ワールド座標 → ローカル座標)
Vector3 localPos = gameobject.transform.parent.InverseTransformPoint(gameobject.transform.position);
まとめ
・ワールド(position、rotate、scale)はシーン全体の基準!
・ローカル(localPosition、localRotate、localScale)は親オブジェクトの基準!
・ローカル→ワールドはTransformPoint
・ワールド→ローカルはInverseTransformPoint