public override VisualElement CreateInspectorGUI() { var rootElement = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>(Uxml).CloneTree(); var openButton = rootElement.Q <Button>("open"); openButton.clicked += () => { if (serializedObject?.targetObject is ActionAsset asset) { ActionGraphWindow.ShowWindow(asset); } }; openButton.SetEnabled(((ActionAsset)serializedObject.targetObject).actionId.IsCreated); var id = rootElement.Q <ActionIdField>("id"); if (settings != null) { if (serializedObject.targetObject is ActionAsset actionAsset) { try { id.value = actionAsset.actionId; } catch (Exception) { Debug.LogError($"Error setting Action Id. Consider Reimporting {AssetDatabase.GetAssetPath(actionAsset)}"); } } id.RegisterValueChangedCallback(evt => { var previousInfo = evt.previousValue.IsCreated ? ActionDefinitionAsset.Load(evt.previousValue) : null; var self = (ActionIdField)evt.target; var newInfo = evt.newValue.IsCreated ? ActionDefinitionAsset.Load(evt.previousValue) : null; var asset = (ActionAsset)serializedObject.targetObject; var model = asset.CreateModel(); bool retainNodes = false; if (previousInfo == null || model.nodes.Count == 0 || ConfirmActionTypeChange(previousInfo, newInfo, out retainNodes)) { model.id = evt.newValue; if (!retainNodes) { model.nodes.Clear(); model.masterNodeLayout = default; } asset.UpdateAsset(model); openButton.SetEnabled(evt.newValue.IsCreated); } else { self.SetValueWithoutNotify(evt.previousValue); } }); } return(rootElement); }
private static void AddHeader(UnityEditor.Editor editor) { if (editor?.target != null && editor.targets.Length == 1 && editor.target is ScriptableObject scriptableObject) { if (editor.target.GetType().GetSerializableFields(fieldInfo => typeof(ActionAsset).IsAssignableFrom(fieldInfo.FieldType)).Length > 0) { var rect = EditorGUILayout.GetControlRect(); if (GUI.Button(rect, "Open In Action Graph")) { ActionGraphWindow.ShowWindow(scriptableObject); } } } }