UI Toolkitでスクリプトから要素を検索する方法をいくつか記載していきます。
環境
バージョン | |
---|---|
Unity | 2022.3.11f1 |
Query メソッド
UQueryという、JQueryとLinqから着想を得た機能をつかって要素を取得します。
動的なメモリ割り当てを制限するように設計されていて、モバイルプラットフォームで最適なパフォーマンスがでるようになっているようです。
QueryとQという拡張メソッドをつかってUXMLで定義したvisual elementを検索することができます。
Queryは、次のパブリックメソッド使って、一致するリストまたは単一の要素を返します。
-
First
- 条件に一致する最初の要素、見つからなければnullを返す
-
Last
- 条件に一致する最後の要素、見つからなければnullを返す
-
AtIndex
- 指定のインデックスの要素を返す
- Build().AtIndex()の短縮形
-
Children
- 直接の子要素すべてを返す
-
Where
- 引数で渡した条件がtrueとなる要素を返す
Qは、Query.First() の短縮形となっています。
要素の取得方法
名前による取得
UITest.cs
// OKButtonという名前の全ての要素を返す
List<VisualElement> result = ve.Query("OKButton").ToList();
// どちらもOKButtonという名前がついている中から最初にみつけた要素を返す
VisualElement result = root.Query("OKButton").First();
VisualElement result = root.Q("OKButton");
型による取得
UITest.cs
// Button型で、OKButtonという名前をもつ、最初に見つけた要素を返す
Button okButton = root.Q<Button>("OKButton");
// Button型で二つ目の要素を返す
Button cancelButton = root.Query<Button>().AtIndex(1);
その他の検索方法
UITest.cs
// yellowというUSSのクラスをもつすべての要素を返す
List<VisualElement> result = root.Query(className: "yellow").ToList();
// Containerという要素の子の、CancelButtonという名前の1つ目の要素を返す
Button cancelButton = root.Query<VisualElement>("Container").Children<Button>("CancelButton").First();
参考