Esempio n. 1
0
        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);
             }
         }
     }
 }