コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】オブジェクト検索用の関数がたくさん用意された「Unity Scene Query」紹介

はじめに

「Unity Scene Query」を Unity プロジェクトに導入することで
オブジェクト検索用の関数がたくさん使用できるようになります

使い方

using RSG.Scene.Query;

上記の using をソースコードの先頭に追加して

var sceneQuery = new SceneQuery();

SceneQuery 型の変数を作成して使用します

基本的な関数

// 指定された名前のオブジェクトを取得
// (存在しない場合は null を返す)
var player = sceneQuery.SelectOne("Player");

// 指定された名前のオブジェクトを取得
// (存在しない場合は例外を投げる)
var player = sceneQuery.ExpectOne("Player");

// 指定された名前のオブジェクトをすべて取得
var pedestrians = sceneQuery.SelectAll("Pedestrian");

// 指定された階層に存在する子オブジェクトを取得
var child = sceneQuery.SelectOne("Parent/Child");
var child = sceneQuery.SelectOne("Parent/Inner1/Inner2/Child");

// 指定された階層に存在する子オブジェクトをすべて取得
var children = sceneQuery.SelectAll("Parent/Child");

// 指定された階層のどこかに存在する子オブジェクトを取得
var children = sceneQuery.SelectAll("Parent>Child");

// 指定されたレイヤーもしくはタグに紐付くオブジェクトをすべて取得
var pedestrians = sceneQuery.SelectAll(".Pedestrian");

// 指定された型に紐づくオブジェクトを取得
var pedestrian = sceneQuery.SelectOne<Pedestrian>();

// 指定された型に紐づくオブジェクトをすべて取得
var pedestrians = sceneQuery.SelectAll<Pedestrian>();

// 指定したゲームオブジェクトから指定された名前の子オブジェクトを取得
GameObject parent = ...
GameObject child = parent.SelectOne("some-child");

// 指定したゲームオブジェクトから指定された名前の子オブジェクトをすべて取得
GameObject parent = ...
GameObject child = parent.SelectAll("some-child");

部分一致とワイルドカード

// 「Pedestrian」で始まる名前のオブジェクトをすべて取得
var pedestrians = sceneQuery.SelectAll("?Pedestrian");

// オブジェクトをすべて取得
 var everything = sceneQuery.SelectAll("?.*");

// 「Road」で始まるレイヤーもしくはタグに紐付くオブジェクトをすべて取得
var allRoads = sceneQuery.SelectAll(".?Road");

参考サイト様

関連記事