UXML テンプレートからユーザーインターフェースをビルドするには、最初にそのテンプレートを VisualTreeAsset
に読み込む必要があります。
var template = EditorGUIUtility.Load("path/to/file.uxml") as VisualTreeAsset;
次に、ビジュアルツリーを作成し親要素にアタッチします。
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.GetRootVisualContainer().Add(ui);
}
void OnGUI () {
// IMGUI 関連を処理する必要がないかぎり、ここでは何も行いません。
}
}