「ヒエラルキー」を整理して効率よく作業しよう -Unityでの作業効率化-

シーン上のGameObjectは、Hierarchy上で階層関係を構築して整理することができます。
「子」オブジェクトは「親」オブジェクトのTransform(位置や回転・拡大縮小)やActive状態と連動するので、オブジェクトをグループ化してまとめて操作したり、複雑な機能を分割して子オブジェクトにしたりといったことができます。
今回はそうしたHierarchy上のオブジェクトの整理の例をいくつか紹介します!

※ここで紹介するのはあくまで一例であり、状況によっては他の方法が適している場合もあります。

ヒエラルキーの整理方法

まずは、階層構造をつくってHierarchyを整理してみます。

  • すでにあるオブジェクトの階層構造は、Hierarchy上にあるオブジェクト名をドラッグ&ドロップして操作することができます。
  • オブジェクト名をドラッグして別のオブジェクト上にドロップすることで、オブジェクト同士が親子関係になります。
  • また新しいGameObjectを作成する際に、「親」にしたい既存のGameObjectを右クリックしてメニューを開くと、そのGameObjectの子として新しいGameObjectを作成することができます。

アイテムでの使用例 -機能を分割して編集しやすく-

アイテムなど、「ギミック・トリガー」「3Dモデル」「コライダー」などといった多くの構成要素からなるオブジェクトは、それぞれの要素を分割して子オブジェクトにするのがオススメです。

3Dモデルをアイテムとして設定する場合の例で紹介します。
ここでシーン上に設置した3Dモデルに直接Itemコンポーネントやトリガー・ギミックを設定したとしましょう。
このアイテムを少し変更したい、という場合を考えてみます。例えば見た目を変更したい場合、新しい3Dモデルをシーンに設置し、改めてコンポーネントを設定していく必要があります。

※単一メッシュのモデルであれば「Mesh Filter」「Mesh Renderer」コンポーネントの変更でも対応できますが、複数メッシュからなるような3Dモデルなどでは特に差し替えが難しくなります。

また、ひとつのオブジェクトに多くのコンポーネントを設定すると、Inspectorの表示項目が増え、見づらくなってしまいます。

こうした場合は空のGameObjectにItem関連コンポーネントを設定し、3Dモデルはその子オブジェクトにすると便利になります。

※「Item」コンポーネントは親オブジェクトに設定する必要があります。また名前に「Item」と付いたギミック・トリガーなどはItemコンポーネントと同じオブジェクトに設定する必要があります。

こうすると、見た目を変更したい場合は子オブジェクトの3Dモデルを削除して新しい3Dモデルを配置するだけで、他の機能に影響を与えずに変更することができます。
同様にコライダーなども別の子オブジェクトとして作成しておくと、変更したい要素のオブジェクトのみ操作すればいいため分かりやすくなります。

※コライダーが同じオブジェクトにないと機能しないコンポーネントもあります。うまく動作しない場合はCluster Creator Kit公式ドキュメントUnity公式ドキュメントでコンポーネントの使用条件を確認してください。

ちなみに複数のモデルを組み合わせて使いたい場合などは、3Dモデル同士を親子関係にするのではなく、同じ階層の子オブジェクト(兄弟オブジェクト)にすると位置や大きさの調整がしやすくなります。

この場合、アイテムオブジェクトの子に空の「Models」オブジェクトを作成し、その子として3Dモデルを配置していくと、必要ない場合は畳んで表示することができ、Hierarchyが見やすくなります。

複数の部屋・エリアなどに分かれている場合での使用例 -グループにまとめて操作する-

次はゲームワールドなどで、複数の部屋またはエリアを行き来するような場合の例を考えてみます。

例えば部屋や内装のモデルやギミックをそのまま置いていった場合、もし部屋の位置を移動したくなった場合には関連するオブジェクトをひとつずつ選択して移動する必要があります。

こういった場合はそれぞれの部屋がひとまとまりのグループになるよう、部屋ごとに空のGameObjectを作成して、内装などはその子にするのがオススメです。
こうしておくと、部屋の位置や大きさを変えたり、回転させたりといった場合に親のGameOjbectを操作するだけでできるようになります。

同様に、部屋の中でも「机の上のもの」「引き出しの中のもの」などのように、位置関係を維持したいものは親オブジェクトをつくってグループにしておきましょう。

その他 -同じカテゴリでまとめる-

他にも、例えば「ライティング」「建物」「乗り物」などのように同じカテゴリのものについてグループにまとめておくと整理しやすくなる場合もあります。
GameObjectのActive状態は「自身がActive」かつ「すべての親がActive」のときにActive(表示される)となるので、共通の親オブジェクトにまとめると一括で表示・非表示を切り替えるなどといった使い方ができます。

今回はHierarchy整理の例を紹介しました。
最適な構成はつくりたいものなどによって変わるため、これらは一例であり必ずしも正解とは限りませんが、「子オブジェクトは親オブジェクトのTransformとActiveの影響を受ける」という点を意識して、使いやすく整理することを心がけてみましょう。

記事をシェアしてワールド制作を盛り上げよう!