Unity入門

【Unity】Transformの使い方|WorldとLocalの違い、スクリプト、position、roration、scale、座標変換

Unityでオブジェクトを動かすとき、ワールド座標とローカル座標を適切に使い分けることが重要です。

  • オブジェクトを親の位置を基準にして移動したい!
  • 回転後のオブジェクトをローカル軸で移動したい!

transform.positionやtransform.localPositionを理解すると、正確なオブジェクト制御が可能になり、意図したとおりにキャラクターやカメラを動かすことができます! この
記事では、グローバル座標・ローカル座標の違い、移動・回転・スケールの設定方法、スクリプトでの操作方法まで詳しく解説します!

この記事でわかること

  • WorldLocalの違い
  • 移動(position・localPosition)の使い分け
  • 回転(rotation・localRotation)の使い分け
  • スケール(Scale・localScale)の使い分け

Transformの使い方(World、Local

Worldとは、シーンの基準となる点(0,0,0)からの絶対値のことです。
Localとは、親オブジェクトを基準とした基準系(相対値)のことです。

Unity World、Localの違いの画像

※ この他にも以下のサイトを参考にしてください。

World vs Localのスクリプトの書き方

操作ワールドローカル
移動transform.positiontransform.localPosition
回転transform.rotationtransform.localRotation
拡縮transform.Scaletransform.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