public static VisualElement CreateNewAssetEditorUI() { CreateInstance(); VisualTreeAsset aAssetEditorAsset = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/Editor/UXML Files/AssetEditor.uxml"); mInstance.mAssetEditorUI = aAssetEditorAsset.CloneTree(); mInstance.mSelectionField = mInstance.mAssetEditorUI.Q <ObjectField>("asset_field"); mInstance.mTypeOfAsset = mInstance.mAssetEditorUI.Q <EnumField>("asset_type"); if (mInstance.mCurrentAssetData == null) { mInstance.mTypeOfAsset.Init(AssetMetaData.AssetType.None); } else { mInstance.mTypeOfAsset.Init(mInstance.mCurrentAssetData.mType); } mInstance.mTypeOfAsset.RegisterCallback <ChangeEvent <System.Enum> >((aEv) => mInstance.ActivateObjectFieldOfType((AssetMetaData.AssetType)aEv.newValue)); if (mInstance.mCurrentAssetData != null) { mInstance.SetObjectFieldType((AssetMetaData.AssetType)mInstance.mTypeOfAsset.value); string aAssetPath = AssetDatabase.GUIDToAssetPath(mInstance.mCurrentAssetData.mGUID); mInstance.mSelectionField.value = AssetDatabase.LoadAssetAtPath(aAssetPath, AssetDatabase.GetMainAssetTypeAtPath(aAssetPath)); } else { mInstance.mSelectionField.SetEnabled(false); } mInstance.mSelectionField.RegisterCallback <ChangeEvent <Object> >((aEv) => mInstance.SetSelectedObjectData(aEv.newValue)); mInstance.mAssetEditorData = mInstance.mAssetEditorUI.Q <VisualElement>("asset_editor_data"); mInstance.mObjectData = mInstance.mAssetEditorData.Q <VisualElement>("asset_data"); mInstance.mObjectData.Q <Button>("asset_meta_data").RegisterCallback <MouseUpEvent>(mInstance.SaveAsScriptableAsset); if (mInstance.mCurrentAssetData != null) { mInstance.mObjectData.Bind(new SerializedObject(mInstance.mCurrentAssetData)); } else { mInstance.mAssetEditorData.Remove(mInstance.mObjectData); } return(mInstance.mAssetEditorUI); }