空のゲームオブジェクトの位置を0,0,0にしておこう


「玉転がしゲーム」チュートリアルに限らず、多くのUnityチュートリアルで出てくる「空(から)のオブジェクト」。複数のオブジェクトを1つの空のオブジェクトの子にまとめて整理する、というのがよくある使い方である。

この空のオブジェクトにも実は位置(Position)の情報がある。カラッポなので位置なんてどこでもいい……のだが、これで子オブジェクトをまとめると少し困ることがある。親子関係にある子オブジェクトの位置の値は、親オブジェクトからの相対位置となる性質があるためだ。

説明がややこしいので
画像で説明するぞ


4つある「Wall~Wall 3」を空のオブジェクトをつくってまとめよう

まず空のオブジェクトを作成する

よくみると空のオブジェクト「GameObject_Walls」の位置は半端な数値になっている

3Dオブジェクト「Wall 1」は、チュートリアルに従って X:0.5 Y:0.5 Z:9.5 の綺麗な位置に設置している。これを半端な位置にある「GameObject_Walls」の子にすると……

なんとWall 1の位置が半端な値に書き換わってしまう!

シーンビューでは変化がないので気づかない

シーンビューで変化ないなら
気にしなくていいんじゃないっすか?
それが困る場合があるんだよね


例えばWall 1のすぐ隣に、同じ高さの他オブジェクトを配置するとしよう。Wall 1の位置の値をコピーしてずらせば綺麗な位置になるはずだが……

なんと!位置が半端な値である(2回目)。小数点以下ごとコピーしてピッタリ設置できなくもないけど、そもそもUnity初心者はここで初めて数値がおかしくなってる??と気づく

えーと、確か
X:0.5、Y:0.5で
Zが8.5か9.5だったような……?
そんなこと
覚えてられないよな~


単にチュートリアルを終わらせるだけならあまり気にならないのだが、自分でステージを改造したり、オリジナルのゲームを作ったりするときに困る場合がある。空のオブジェクトを作成したら、位置をX:0,Y:0,Z:0にするなど、適切な位置にしておくと安心だ。

ちなみに配置した後で気づいた場合も、対象の親子関係をいったん解除する(ドラッグ&ドロップで外に移動する)ことで親となる空のオブジェクトの位置を設定しなおすことができるぞ。

子オブジェクト(Wall 1)を親オブジェクト(GameObject_Walls)の外に移動すると位置が元の値に戻るぞ

空のオブジェクトの位置を0,0,0にしてから、再び親子関係にしよう