Unityではゲームオブジェクトを階層的に管理することができます。
まとめて複数のゲームオブジェクトを管理しやすくなり、Hierarchyの見やすさも向上します。
上の階層にあるものを親、下の改装にあるものを子と呼びます。
ゲームオブジェクトを子オブジェクトとしたいときはHierarchy上でそのゲームオブジェクトを親オブジェクトとしたいゲームオブジェクト上にドラッグアンドドロップするだけです。
このとき子オブジェクトは親オブジェクトとの相対座標で管理され、親オブジェクトを移動させると子オブジェクトも同じく移動させることができます。
また、Hierarchy上では親オブジェクトの左に表示される三角で子オブジェクトを表示させたり折りたたんだりすることができます。
いままで主にスクリプトを実行するために空のゲームオブジェクトを使用してきたが、そのほかにも多くの活用方法がある。
など
うまく活用するとシーンを管理しやすくなる
↓空のゲームオブジェクトの活用例
「—————-MR——————」などと名付けた空のゲームオブジェクトを使用することでゲームオブジェクトを役割ごとに区切って分類している。
マネージャー系はすべて空のゲームオブジェクトにアタッチしている。
また、親子関係を使うことでHierarchyでスクロールしなくてもすべて見られるようにしている。
同じ機能を持つゲームオブジェクトをたくさん配置したいとき、一つずつコピーするのは面倒くさいし、処理的にも非効率です。しかも、仕様変更したくなったときもすべてのゲームオブジェクトの数値を一つずつ変更しなければならず大変です。
また、ゲーム中にスクリプトでゲームオブジェクトを出現させたいときはどうすればいいのでしょうか?
UnityにはPrefabという機能があります。
試しに取得できるアイテムをPrefabを使用して実装してみようと思います。
シーン上にCubeを作成してください。
名前はItemにします。
座標は(0, 0.5, 0)、回転は(45, 0, 45)、大きさは(0.5, 0.5, 0.5)にしてそれっぽくします。Transform
マテリアルを作成して色を付けます。マテリアル
アイテムがボールにぶつかってボールの挙動が変化しないように、ColliderのIsTriggerにチェックを付けます。当たり判定
当たり判定を取得しやすくするためにタグ(Item)を作成し、付けます。タグ
このようなアイテムを一つ制作することができました。
これをPrefab化します。
Prefab化するためにはそのゲームオブジェクトをAssets内にドラッグアンドドロップするだけです。
作成したPrefabsフォルダに移動 Prefabs(プレハブというファイル用)
アイテムをPrefabsフォルダにドラッグアンドドロップする。
Prefab化したゲームオブジェクトはHierarchy内で青色になる。
Prefabをシーンに配置するとそのPrefabをコピーできます。このコピーされたゲームオブジェクトをインスタンスと呼びます。
Prefab化されたアイテムをシーンにたくさん配置してみよう。
Prefab化されたアイテムをHierarchy上にドラッグアンドドロップする。
たくさん配置する(今回は20個ほど)
Hierarchyが多くのItemで埋め尽くされてしまったので、親オブジェクトを使用して見やすく整理する。
シーン上に空のゲームオブジェクトを作成し、Itemsと名付ける。
Itemsの座標を(0, 0, 0)にする。(子オブジェクトの座標が親オブジェクトの相対座標となるため分かりやすくするため)
Hierarchy上でShiftキーを押しながらItemをすべて選択し、Itemsの子オブジェクトとするためにドラッグアンドドロップする。
トグルで畳むことができるようになった!
アイテムをいい感じにステージ上に散らし、Y座標はすべて0.5にする。
Hierarchy上でShiftキーを押しながらItemをすべて選択し、InspecterでY座標を変更すると一括変更できて楽。