UXML テンプレートからユーザーインターフェースをビルドするには、最初にそのテンプレートを VisualTreeAsset
に読み込む必要があります。
var template = EditorGUIUtility.Load("path/to/file.uxml") as VisualTreeAsset;
以下はより直接的な方法です。
var template = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("path/to/file.uxml");
次に、ビジュアルツリーを作成し親要素にアタッチします。
template.CloneTree(parentElement, slots);
上のステートメントでは、テンプレートの <UXML>
要素は VisualElement
には変換されません。その代わりに、すべての子は parentElement
で指定された要素にアタッチされます。
テンプレートがインスタンス化されると、UQuery (JQuery/Linq の Unity への実装) を使って要素のビジュアルツリーから特定の要素を取得することができます。
例えば、次のコードは新しい EditorWindow
を作成し、そのコンテンツとして UXML ファイルを読み込む方法を示しています。
public class MyWindow : EditorWindow {
[MenuItem ("Window/My Window")]
public static void ShowWindow () {
EditorWindow w = EditorWindow.GetWindow(typeof(MyWindow));
VisualTreeAsset uiAsset = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/MyWindow.uxml");
VisualElement ui = uiAsset.CloneTree(null);
w.rootVisualElement.Add(ui);
}
void OnGUI () {
// IMGUI も処理する必要がある場合を除いては、ここでは何も行う必要はありません。
}
}