Чтобы создать пользовательский интерфейс из шаблона UXML, необходимо сначала загрузить шаблон в VisualTreeAsset
:
var template = EditorGUIUtility.Load("path/to/file.uxml") as VisualTreeAsset;
или точнее:
var template = AssetDatabase.LoadAssetAtPath("path/to/file.uxml");
Затем вы можете построить визуальное дерево, которое это представляет, и прикрепить его к родительскому элементу:
template.CloneTree(parentElement, slots);
В приведенном выше заявлении элемент
в шаблоне не преобразуется в 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("Assets/MyWindow.uxml");
VisualElement ui = uiAsset.CloneTree(null);
w.rootVisualElement.Add(ui);
}
void OnGUI () {
// Nothing to do here, unless you need to also handle IMGUI stuff.
}
}