【Unity】【UI Toolkit】スクリプトからVisualElementを検索するUQueryの使い方

UnityのUI ToolkitでスクリプトからVisualElementを検索するUQueryの使い方についてまとめました。

Unity 2022.2.17

UQueryとは?

UI Toolkitでは、以下のようにQueryメソッドを使って、目的のVisualElementを検索することができます。

// Button型の要素を全て検索してそのうち最初のものだけを取得する
var button = rootVisualElement.Query<Button>().First();

このように要素を検索するためのクエリをUQueryと呼びます。

QueryとQ

検索のために使えるメソッドにはQueryQがあります。

Queryは以下のように、該当する全ての要素の情報を返します。

// Queryは全てのButton型のVisualElementを返す
var buttons = rootVisualElement.Query<Button>();
// 最初のボタンだけ取得
var firstButton = buttons.First();

これに対してQは、Query().First()のショートハンドです。
つまり、検索結果のうち最初の要素だけを返します。

// 最初のボタンだけ取得
var firstButton = rootVisualElement.Q<Button>();

いろんな検索方法

前述の例では型を使って検索しましたが、そのほかにも名前で検索したりクラス名で検索したりすることもできます。

// 名前で検索
rootVisualElement.Query(name: "Button");
// クラス名で検索
rootVisualElement.Query(className: "ButtonClass");

また、それらを組みあせて全て当てはまることを検索することも可能です。

rootVisualElement.Query<Button>(name: "Button", className: "ButtonClass");

なおVisuale Elementの型やクラス、名前についての概念は以下の記事にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

UQueryBuilderのメソッドを使ってフィルタリング

Query()メソッドは戻り値としてUQueryBuilderを返します。
このクラスはFirst()のように、得られた結果をフィルタリングするメソッドを多数持ちます。

UQueryBuilderが持つフィルタリング用のメソッドは以下の記事にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

参考

docs.unity3d.com

docs.unity3d.com