【Unity】ワールド座標(グローバル座標)・ローカル座標

<空間の見方を便利にする2つの座標系>

Unityにおいて、空間を表現する際にワールド基準、ローカル基準という2つの見方をします。

何故このように2つの見方をするかというと、計算がしやすいからです。

game object cube

↑のようにゲームオブジェクトを空間に置いた時

transform scale

自身がどの位置にいるのかを参照する際に使用します。

Unity初心者の方はこの2つを混同しやすいのでこの2つの違いについて解説していこうと思います。

<ワールド座標(グローバル座標)について>

ワールド座標というのは原点から見た座標になります。

(X,Y,Z)>(0,0,0)の位置からどれだけの距離にいるのかを絶対的な数値で知る事ができます。

グローバル座標で(10,10,10)といえば、絶対に原点からXが10,Yが10,Zが10の位置にいます。

<ローカル座標について>

そのゲームオブジェクトの1つ上の親から見た相対的な座標です。

Unityではゲームオブジェクトに「親子関係」というものを作成する事ができます。

親子関係になると子オブジェクトが親オブジェクトに追従するようになります。
↓の映像ではCubeしか動かしていませんが、Sphereも追従して動いている事がわかると思います。

child and parent

このように位置、回転、大きさが親の影響を受けます。

ちなみに、親は子の影響を受けるわけではないので注意してください。

この時、親から見てどの位置にいるのかを知るためにローカル座標が用いられます。

例えば↓のように2つのゲームオブジェクトを用意します。

Object Cube Sphere

そして、インスペクターでCubeの位置をx座標だけ10に

cube global x

Sphereの位置をx座標だけ15にします。

sphere global x

Cubeの座標は(10,0,0),Sphereの座標は(15,0,0)で現在親子関係ではありません。

ではSphereをCubeの子にしてみてください。

Object parent

Cubeのインスペクターは変わりませんが、Sphereの座標が(5,0,0)になったかと思います。

Cubeが10でSphereが15の位置にいるので、Cubeの子になったSphereはCubeから見て5の位置に存在するという事です。15-10=5ですね。

このように、親から見た相対的な座標をローカル座標と呼びます。

親が1つも存在しない場合ローカル座標=ワールド座標ですが、親が存在する場合、全然違う座標系になるため、注意してください。

<ワールド空間・ローカル空間>

また、座標だけではなく、回転や大きさなどにもワールドとローカルが存在します。

これらも(0,0,0)から見てどれだけ回転しているか、大きくなっているかと、親から見てどれだけ回転しているか、大きくなっているかを表しています。

このような考え方を座標の時と同じようにワールド空間、ローカル空間と言います。

考え方を座標から拡大していると考えてもらっていいかと思います。

<Transformでのワールドとローカル>

インスペクターでのTransformの値はローカル基準のものになります。

sphere global x

スクリプトでの扱いは

・transform.position・・・ワールド空間での位置

・transform.rotation・・・ワールド空間での回転

・transform.lossyScale・・・ワールド空間での大きさ

・transform.localPosition・・・ローカル空間での位置

・transform.localRotation・・・ローカル空間での角度

・transform.localScale・・・ローカル空間での大きさ

で表されます。

この辺りをごっちゃにしてしまってバグってしまう事がよくあるので気に留めておくといいと思います。

<ワールド座標とローカル座標の変換>

ワールド座標をローカル座標に変換するには

Vector3 local = 親のゲームオブジェクト.transform.InverseTransformPoint (ワールド座標);

で変換する事ができます。

ローカル座標をワールド座標に変換するには

Vector3 world = 親のゲームオブジェクト.transform.TransformPoint (ローカル座標);

で変換する事ができます。

<Space型>

スクリプトで空間をワールド基準なのかローカル基準を表したい時に使う型です。

enum型でワールドかローカルかを示すのに使います。

<名前空間・型>

・namespace
UnityEngine

・型
enum型

<要素>

・World

ワールド座標を表します。

・Self

ローカル座標を表します。

<わからない事があったら>

このサイトの説明ではよくわからなかったとか、もっと知りたい事などがあれば、また別の勉強方法があるので違った切り口を使ってみるのもいいと思います。

<オススメの本>

本で詳しい解説がされているので書籍を買ってみるというのも手の一つです。最近はKindle版があるので届くまで待つ事もなく場所も取らないのでとても良いです。

<オンラインスクール>

オンラインスクールでは人に質問する事ができるので、行き詰まってしまった方にオススメです。 無料体験もあるので試しに見てみるのも手ですよ



タイトルとURLをコピーしました