この記事でのバージョン
Unity 2022.3.16f1
はじめに
今回はSelectionGroupsという複数のGameObjectをグループ化して、
グループ単位で操作が行えるUnityの機能(パッケージ)の紹介です!
オブジェクトを検索してまとめたり、Hierarchy上の構造とは別にオブジェクトをグループ化出来るので、
「名前やコンポーネント等で検索して、オブジェクトをグループ化したい」
「複数のオブジェクトをまとめて管理したいが、Hierarchy上では別々の場所にある」
みたいな時に便利です。
なお、Unity公式の機能ですが、
まだPreview版(大きな変更が加わる可能性がある)で、導入も必要です。
SelectionGroups
導入はお馴染みのPackage Managerを使って行います。
上部メニューのWindow/Package Managerからウィンドウを開き、
左上のプラスボタンから「Add package from git URL…」を選択、
com.unity.selection-groupsと入力した後にAddを押すだけで、
導入完了です。
次に使い方ですが、まずWindow/General/Selection Groupsからウィンドウが表示でき、
+ボタンのCreate Empty Groupでグループが作成出来ます。
するとウィンドウと、Hierarchy上にグループのオブジェクトが生成されます。
あとはこのグループにまとめたいGameObjectをドラック&ドロップするだけ。
なお、グループ外に持っていくと、新たなグループが生成されます。
このグループ上のオブジェクトを選択すると
Hierarchy上で選択した時と同じ挙動になり、そのまま編集等も可能です。
また、グループをクリックすると、Inspectorにグループの情報が表示され、
グループの名前や色等を変更出来ます。
さらにGroup Queryで任意のオブジェクトを検索してグループ化する事も可能です。
例えば「Skirt*」と入力すれば名前が「Skirt」で始まる全てのオブジェクトをまとめられます。
この検索方法はGoQLと呼ばれ、以下のようにかなり色々な検索が出来ます。
なお、グループ(SelectionGroup)は
プログラムから取得や追加等の操作をする事も可能です。
//SelectionGroupを使うために必要 using Unity.SelectionGroups;
//Inspectorで設定 [SerializeField] private SelectionGroup _selectionGroup; private void Start() { //グループに設定されているオブジェクトを取得 IList<GameObject> members = _selectionGroup.Members; }