0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【UI Toolkit】スクリプトから要素を検索する

Posted at

UI Toolkitでスクリプトから要素を検索する方法をいくつか記載していきます。

環境

バージョン
Unity 2022.3.11f1

Query メソッド

UQueryという、JQueryとLinqから着想を得た機能をつかって要素を取得します。
動的なメモリ割り当てを制限するように設計されていて、モバイルプラットフォームで最適なパフォーマンスがでるようになっているようです。

QueryQという拡張メソッドをつかって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();

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?