【Unity】GameObjectメニューのCreate Emptyについて解説【初心者向け】
- 2019.05.20
- GameObject
- GameObject, Unity, メニューバー
メニューバーの『GameObject』から作成できるGameObjectの種類について解説するシリーズ。
今回は「Create Empty」と「Create Empty Child」について解説を行います。
Transformを持つだけのシンプルなGameObjectですが、非常に使用用途が多いという素敵なGameObjectでもあります。
環境
macOS 10.14 Mojave
Unity2018.3.14f1
Unity Hub 1.6.2
メニューバーの『GameObject』について
『GameObject』は画面左から5番目、『Assets』と『Component』に挟まれています。
個々のGameObject作成に関してはそれぞれ別記事として作成し、それ以外の項目については以下の記事で解説を行なっています。
この記事では以下の項目を解説していきます。
Create Empty
Transformコンポーネントだけを持つ「空の」GameObjectを作成します。
GameObjectを作った直後はTransformのPositionには何らかの値が入っていることが多いので、コンポーネントの右上にあるメニューボタンから[Reset]を選択して初期化しておくのがおすすめ。
これで扱いやすくなりました。空のGameObjectは主に親要素として使うことが多く、子要素ではこのオブジェクトの位置空の相対位置が使われるため、分かりやすい値にしておくと良いでしょう。
Mesh RendererやSprite Rendererなど、ほにゃららレンダラーのコンポーネントがないため、画面には描画されません。しかしTransformコンポーネントを持つことから、SceneビューではTransformのPositionなどを変更できる赤や緑の矢印が表示されています。
Create Empty Child
選択しているGameObjectの子要素として空のGameObjectを作成します。何も選択していない場合は最上位の階層にGameObjectを作成します。
試しに上で作成した「CreateEmptyObj」を選択した状態で、[GameObject] -> [Create Child Empty]から子要素を作成します。画像のように、1つ下の階層にGameObjectが作成されました。
こちらのGameObjectも[Create Empty]の時と同様にTransformコンポーネントだけを持っています。
Hierarchyウィンドウで右クリックした時に表示されるコンテキストメニューでは『Create Child Empty』が存在しないため、メニューバーから作成する必要があります。
空のGameObjectの使い道
一見何の役にも立たないオブジェクトのようにも思えますが、結構重要なんです。
親要素として使う
いくつかのGameObjectをまとめる親要素として使うことができます。例えば以下のようにスプライト画像を表示するGameObjectをまとめることができちゃいます。
同じカテゴリのオブジェクトをまとめることで、Hierarchyウィンドウでの整理が簡単になります。上の画像で親要素の左側に表示されている折りたたみマークをクリックすれば、子要素を隠せます。Hierarchyウィンドウをスッキリさせておいたほうが目的のオブジェクトを探しやすいですからね。
また、親要素を非アクティブにすることで、子要素も非アクティブの状態になります。一度に画面から消したい時には親要素を非アクティブにするだけでいいので楽ちん。
親要素として使うメリットは他にもあって、子要素の位置を一度に動かせるんです。
例えば以下のBeforeのようにスプライト画像が並んでいて、親オブジェクトがこれをまとめている状態を考えます。親オブジェクトが存在しない場合は6つのGameObjectを全て自力で移動させる必要がありますが、親オブジェクトがいる場合はそれを動かすだけでAfterのように全体が動くんです。
上の方でちょっと触れましたが、GameObjectが親子関係になっているとき子要素となるGameObjectでは、親要素のGameObjectが持つTransformからどれだけずれているか、その相対位置を持っています。位置だけではなく、回転、スケールも同様です。
例えば親GameObjectのTransformのPositionが(0, 0, 0)で、子GameObjectのTransformのPositionが(1, 1, 1)だったとします。これは「親の座標から(1, 1, 1)ずれています」という状態を表します。
このとき、親の位置を(3, 3, 3)に変えると、子GameObjectのTransformでは(1, 1, 1)となっているままですが、画面上では(4, 4, 4)の位置にいます。親の位置を基準に、自分の位置を計算しているわけですね。
UIを画面に表示する場合は、空のGameObjectで整理して、位置を一度に動かして……と特によく使います。
スクリプトを持たせるGameObjectにする
私がよく使うのが、スクリプトを持たせるためのGameObjectにすること。
主にそのシーン全体の動作をまとめるManager的なスクリプトを用意する時に使います。
「空のGameObjectでいいや」と判断する基準は、RigidbodyやColliderなど、他のコンポーネントの情報が必要かどうかです。画面に描画する必要もないし、特にコンポーネントもいらないときは空のGameObjectで十分なんです。
後から何かのコンポーネントが必要になった場合は、『Add Component』で追加できるのも良い点です。
まとめ
「Create Empty」と「Create Child Empty」についての解説でした。
Hierarchyウィンドウの整理、子要素をまとめて操作する、スクリプトをアタッチする土台にする、などなど。使用用途が広いのがこの空のGameObjectです。
Hierarchyウィンドウの整理は特にUIを作成する時に重要です。パーツごとにまとめておかないと大変な状況になりますからね。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【Unity】メニューバーの「GameObject」について解説【初心者向け】 2019.05.20
-
次の記事
【Unity】GameObjectメニューの3D Objectについて解説【初心者向け】 2019.05.21
コメントを書く