【Unity】ワールド座標とローカル座標について

日々鍛錬!!ゲーム開発ライフ

【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でした!!

Tags:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です