Unity で Hierarchy 内の順番をスクリプトから変更する方法【SetSibling】

Unity で Hierarchy 内の順番をスクリプトから変更する方法

Unity でゲーム開発を行う際、オブジェクトの階層や順序を動的に変更する必要がある場面がしばしばあります。

そんな時に役立つのが、Transform コンポーネントの SetSibling 系メソッドです。

このブログでは、Transform の SetAsFirstSiblingSetAsLastSiblingSetSiblingIndex の3つのメソッドを使い、オブジェクトの階層内での順番を変更する方法を解説します。

Transform の SetSibling 系メソッドとは

Transform の SetSibling 系メソッドとは、Unity でのゲーム開発において、オブジェクトの階層関係を動的に操作するための強力なツールです。

これらのメソッドは、シーン内のオブジェクトの親子関係を構築する際に、子オブジェクトの順序をプログラム上から柔軟に変更することを可能にします。

Unity の各 GameObject には Transform コンポーネントがあり、これを通じてオブジェクトの位置、回転、スケールを管理しています。しかし、Transform コンポーネントはこれだけではなく、オブジェクトの階層構造における順序も管理できます。

具体的には、SetSiblingIndexSetAsFirstSiblingSetAsLastSiblingの3つのメソッドがこれに該当します。

SetAsFirstSibling:最前面への配置

SetAsFirstSiblingメソッドは、ローカルの Transform リストで一番最初の順番になるよう移動します。このメソッドは引数を取りません。

// GameObject を階層内の最初の位置に移動
gameObject.transform.SetAsFirstSibling();

SetAsFirstSibling メソッドは、特にUIの要素やゲームオブジェクトの階層の中で、特定のアイテムを最前面に表示したい場面で有効に活用できます。

SetAsLastSibling:最背面への配置

SetAsLastSiblingメソッドは、ローカルの Transform リストで、一番最後の順番になるよう移動します。このメソッドは引数を取りません。

// GameObject を階層内の最後の位置に移動
gameObject.transform.SetAsLastSibling();

SetAsLastSiblingメソッドは、例えば、ある UI 要素を他の要素の後ろに隠したい場合に有効です。

SetSiblingIndex :指定位置への移動

SetSiblingIndexメソッドは、Transform をリスト内で特定の位置に移動させます。

このメソッドは、引数として「インデックス」(整数値)を取ります。このインデックスはリスト内での新しい位置を示します。

// GameObject を階層内の特定の位置(例:インデックス2)に移動
gameObject.transform.SetSiblingIndex(2);

この例では、gameObject をリスト内の3番目の位置(インデックスは0から始まる)に移動します。

もし指定したインデックスがリスト内のオブジェクトの数よりも大きい場合、その GameObject はリストの最後に配置されます。

おわりに

これらのメソッドを活用することで、Unity 内でのオブジェクトの表示順や階層構造を効率的に管理することが可能になります。

特に、動的な UI の配置や、ゲーム内でオブジェクトの順序をリアルタイムで変更する際に非常に有効です。

参考リンク