【Unity】ワールド座標とローカル座標について
UnityとUnrealEngineでゲーム開発中の「Exceliaゲーム開発部」の部員Eです。
本日はUnityの基本編。
ワールド座標とローカル座標についてです。
初めてUnityを触ったとき、キャラクターの正面がどの方向かわからなかったので、苦労しました。
なので、まとめてみたいと思います。
キャラクターの基準の向き

キャラクターの正面の向きの基準は、「transform.forward」で青軸(Z軸)の矢印側
キャラクターの右向きの基準は、「transform.right」で赤軸(X軸)の矢印側
キャラクターの上向きの基準は、「transfrom.up」で緑軸(Y軸)の矢印側
となります。
スクリプト上で、これら3つの基準点を逆側にしたい場合は、マイナスをつけてあげます。
キャラクターの背面の向きの基準は、「-transform.forward」で青軸(Z軸)の棒側
キャラクターの左向きの基準は、「-transform.right」で赤軸(X軸)の棒側
キャラクターの下向きの基準は、「-transfrom.up」で緑軸(Y軸)の棒側
となります。
「transfrom.back」や「transform.left」「transform.down」があるわけではないようです。
foward・right・upだけ覚えておけば良いのは、頭がこんがらがらず楽ですね。
キャラクターの正面はZ軸のforward方向です。
前に進ませたい時の基準の向きは基本的に「forward」になるということを覚えておくといいかと思います。
冒頭でも言いましたが、Unityをいじり始めた当初これがわからなくて苦労しました。
ワールド座標
ワールド座標は、プロジェクト全体の空間が持つゲーム座標です。
最も上位にある階層(Unityだとシーン階層の直下)の事をワールド座標と呼ぶようです。

今回はシーンファイルである「Playground」の一つ下の階層の事となります。
Unityの場合、ヒエラルキーウインドウの+からゲームオブジェクトを単に生成するだけで、
特に何もしなければ生成される基準点はワールド座標の(0.0.0)になります。

Terrainを生成するとワールド座標である(0.0.0)を原点としてTerrainが生成されます。
赤枠で囲った座標が(0.0.0)になっているのがわかりますね。

こちらも、原点である(0.0.0)に配置してみました。
ワールド座標の原点にCubeを配置したところ、赤枠の座標はやっぱり(0.0.0)です。
ローカル座標
ローカル座標は、ゲームオブジェクトやアクタの持つゲーム座標です。
何もしなければ基準点はローカル座標の(0.0.0)になります。
こちらは、ワールド座標上にある親オブジェクトの一つ下の階層以下のゲームオブジェクトが持つ座標です。
*下記画像の赤枠のオブジェクトの事。

オブジェクトやアクタの持つローカル座標を動かした場合、その座標分だけ、ワールド座標に加算減算されて座標や回転角が動きます。
ローカル座標とローカル座標の回転角をどちらも(0.0.0)にする事で、「親オブジェクトの持つワールド座標の位置を中心にした場所」にゲームオブジェクトやアクタを持ってくる事ができます。
慣れないうちに、色々ワールド座標とローカル座標を動かすと、何が何だか分からなくなります。

子であるCapsuleを生成してローカル座標を(2.0.0)分動かしてみました。
赤枠のローカル座標がちゃんと(2.0.0)分動いています。
この時、子であるCapsuleのローカル座標の原点は、
ワールド座標が親であるキューブの座標である(0.0.0)です。

ヒエラルキーを再度確認すると、ちゃんとCubeがCapsuleの親であることがわかります。
折角なので、親であるCubeの座標を(-1.0.0)回転を(0.0.30)動かしてみました。
すると、親のCubeを動かした分、子であるCapsuleも一緒に動きます。
子であるCapsuleはワールド座標の移動分である位置(-1.0.0)と回転(0.0.30)にプラスして、ローカル座標移動分である位置(2.0.0)分動いています。
総合すると、子であるCapsuleはワールド座標に対して、位置(1.0.0)回転(0.0.30)動いていることになります。

ちょっとややこししいですが面白いですね。
長くなったので本日はここまでにします。
ワールド座標とローカル座標、キャラクターの向きなど、
少しややこしいですが慣れてくると面白いですね。
部員Eはわからなくなったら、とりあえず原点である(0.0.0)に戻して確認してみています。
ゲーム開発は大変ですが、今日も明日もレッツトライ!!
共に頑張りましょう。
次回は、短い更新ですが、座標系で自分が躓いたことの解説でもしようかと思います。
以上、部員Eでした!!