//Bind graph to owner void AssetToLocal() { var newGraph = (Graph)EditorUtils.AddScriptableComponent(owner.gameObject, owner.graphType); newGraph.hideFlags = HideFlags.HideInInspector; EditorUtility.CopySerialized(owner.graph, newGraph); Undo.RegisterCreatedObjectUndo(newGraph, "New Bound Graph"); Undo.RecordObject(owner, "New Bound Graph"); owner.graph = newGraph; EditorUtility.SetDirty(owner); EditorUtility.SetDirty(newGraph); }
//create new local graph and assign it to owner Graph NewAsLocal() { var newGraph = (Graph)EditorUtils.AddScriptableComponent(owner.gameObject, owner.graphType); newGraph.name = owner.graphType.Name; newGraph.hideFlags = HideFlags.HideInInspector; Undo.RegisterCreatedObjectUndo(newGraph, "New Bound Graph"); Undo.RecordObject(owner, "New Bound Graph"); owner.graph = newGraph; EditorUtility.SetDirty(owner); EditorUtility.SetDirty(newGraph); return(newGraph); }
//This is called outside Begin/End Windows from GraphEditor. void ShowToolbar(Event e) { var owner = this.agent != null && agent is GraphOwner && (agent as GraphOwner).graph == this? (GraphOwner)agent : null; GUILayout.BeginHorizontal(EditorStyles.toolbar); GUI.backgroundColor = new Color(1f, 1f, 1f, 0.5f); ///FILE if (GUILayout.Button("File", EditorStyles.toolbarDropDown, GUILayout.Width(50))) { var menu = new GenericMenu(); #if !UNITY_WEBPLAYER //Import JSON menu.AddItem(new GUIContent("Import JSON"), false, () => { if (allNodes.Count > 0 && !EditorUtility.DisplayDialog("Import Graph", "All current graph information will be lost. Are you sure?", "YES", "NO")) { return; } var path = EditorUtility.OpenFilePanel(string.Format("Import '{0}' Graph", this.GetType().Name), "Assets", exportFileExtension); if (!string.IsNullOrEmpty(path)) { if (this.Deserialize(System.IO.File.ReadAllText(path), true, null) == null) //true: validate, null: this._objectReferences { EditorUtility.DisplayDialog("Import Failure", "Please read the logs for more information", "OK", ""); } } }); //Expot JSON menu.AddItem(new GUIContent("Export JSON"), false, () => { var path = EditorUtility.SaveFilePanelInProject(string.Format("Export '{0}' Graph", this.GetType().Name), "", exportFileExtension, ""); if (!string.IsNullOrEmpty(path)) { System.IO.File.WriteAllText(path, this.Serialize(true, null)); //true: pretyJson, null: this._objectReferences AssetDatabase.Refresh(); } }); #else menu.AddDisabledItem(new GUIContent("Import JSON (not possible with webplayer active platform)")); menu.AddDisabledItem(new GUIContent("Export JSON (not possible with webplayer active platform)")); #endif menu.ShowAsContext(); } ///EDIT if (GUILayout.Button("Edit", EditorStyles.toolbarDropDown, GUILayout.Width(50))) { var menu = new GenericMenu(); //Bind if (!Application.isPlaying && owner != null && !owner.graphIsLocal) { menu.AddItem(new GUIContent("Bind To Owner"), false, () => { if (EditorUtility.DisplayDialog("Bind To Owner", "This will create a local copy of the graph binded to the owner.\nIt will allow you to assign direct scene references in the graph.\nContinue?", "YES", "NO")) { var newGraph = (Graph)EditorUtils.AddScriptableComponent(owner.gameObject, owner.graphType); newGraph.hideFlags = HideFlags.HideInInspector; EditorUtility.CopySerialized(owner.graph, newGraph); newGraph.Validate(); Undo.RegisterCreatedObjectUndo(newGraph, "New Local Graph"); Undo.RecordObject(owner, "New Local Graph"); owner.graph = newGraph; EditorUtility.SetDirty(owner); EditorUtility.SetDirty(newGraph); } }); } else { menu.AddDisabledItem(new GUIContent("Bind To Owner")); } //Save to asset if (owner != null && owner.graphIsLocal) { menu.AddItem(new GUIContent("Save To Asset"), false, () => { var newGraph = (Graph)EditorUtils.CreateAsset(this.GetType(), true); if (newGraph != null) { EditorUtility.CopySerialized(this, newGraph); newGraph.Validate(); AssetDatabase.SaveAssets(); } }); } else { menu.AddDisabledItem(new GUIContent("Save To Asset")); } //Create defined vars if (blackboard != null) { menu.AddItem(new GUIContent("Promote Defined Parameters To Variables"), false, () => { if (EditorUtility.DisplayDialog("Promote Defined Parameters", "This will fill the current Blackboard with a Variable for each defined Parameter in the graph.\nContinue?", "YES", "NO")) { CreateDefinedParameterVariables(blackboard); } }); } else { menu.AddDisabledItem(new GUIContent("Create Defined Blackboard Variables")); } menu.ShowAsContext(); } ////// ///PREFS if (GUILayout.Button("Prefs", EditorStyles.toolbarDropDown, GUILayout.Width(50))) { var menu = new GenericMenu(); menu.AddItem(new GUIContent("Use Node Browser"), NCPrefs.useBrowser, () => { NCPrefs.useBrowser = !NCPrefs.useBrowser; }); menu.AddItem(new GUIContent("Show Icons"), NCPrefs.showIcons, () => { NCPrefs.showIcons = !NCPrefs.showIcons; }); menu.AddItem(new GUIContent("Show Node Help"), NCPrefs.showNodeInfo, () => { NCPrefs.showNodeInfo = !NCPrefs.showNodeInfo; }); menu.AddItem(new GUIContent("Show Comments"), NCPrefs.showComments, () => { NCPrefs.showComments = !NCPrefs.showComments; }); menu.AddItem(new GUIContent("Show Summary Info"), NCPrefs.showTaskSummary, () => { NCPrefs.showTaskSummary = !NCPrefs.showTaskSummary; }); menu.AddItem(new GUIContent("Log Events"), NCPrefs.logEvents, () => { NCPrefs.logEvents = !NCPrefs.logEvents; }); menu.AddItem(new GUIContent("Grid Snap"), NCPrefs.doSnap, () => { NCPrefs.doSnap = !NCPrefs.doSnap; }); menu.AddItem(new GUIContent("Breakpoints Pause Editor"), NCPrefs.breakpointPauseEditor, () => { NCPrefs.breakpointPauseEditor = !NCPrefs.breakpointPauseEditor; }); if (autoSort) { menu.AddItem(new GUIContent("Automatic Hierarchical Move"), NCPrefs.hierarchicalMove, () => { NCPrefs.hierarchicalMove = !NCPrefs.hierarchicalMove; }); } menu.AddItem(new GUIContent("Connection Style/Smooth"), NCPrefs.connectionStyle == NCPrefs.ConnectionStyle.Smooth, () => { NCPrefs.connectionStyle = NCPrefs.ConnectionStyle.Smooth; }); menu.AddItem(new GUIContent("Connection Style/Stepped"), NCPrefs.connectionStyle == NCPrefs.ConnectionStyle.Stepped, () => { NCPrefs.connectionStyle = NCPrefs.ConnectionStyle.Stepped; }); menu.AddItem(new GUIContent("Connection Style/Straight"), NCPrefs.connectionStyle == NCPrefs.ConnectionStyle.Straight, () => { NCPrefs.connectionStyle = NCPrefs.ConnectionStyle.Straight; }); //menu.AddItem (new GUIContent ("Use External Inspector"), NCPrefs.useExternalInspector, ()=> {NCPrefs.useExternalInspector = !NCPrefs.useExternalInspector;}); menu.AddItem(new GUIContent("Open Preferred Types Editor..."), false, () => { PreferedTypesEditorWindow.ShowWindow(); }); menu.ShowAsContext(); } ///////// GUILayout.Space(10); ////CLICK SELECT if (agent != null && GUILayout.Button("Select Owner", EditorStyles.toolbarButton, GUILayout.Width(80))) { Selection.activeObject = agent; EditorGUIUtility.PingObject(agent); } if (EditorUtility.IsPersistent(this) && GUILayout.Button("Select Graph", EditorStyles.toolbarButton, GUILayout.Width(80))) { Selection.activeObject = this; EditorGUIUtility.PingObject(this); } //////////////// GUILayout.Space(10); GUILayout.FlexibleSpace(); //DROPDOWN GRAPHOWNER JUMP SELECTION if (owner != null && !NCPrefs.isLocked) { if (GUILayout.Button(string.Format("[{0}]", owner.gameObject.name), EditorStyles.toolbarDropDown, GUILayout.Width(120))) { var menu = new GenericMenu(); foreach (var _o in FindObjectsOfType <GraphOwner>()) { var o = _o; menu.AddItem(new GUIContent(o.GetType().Name + "s/" + o.gameObject.name), false, () => { Selection.activeObject = o; Selection.selectionChanged(); }); } menu.ShowAsContext(); } } //////////////////////////////////// NCPrefs.isLocked = GUILayout.Toggle(NCPrefs.isLocked, "Lock", EditorStyles.toolbarButton); GUILayout.Space(2); GUI.backgroundColor = new Color(1, 0.8f, 0.8f, 1); if (GUILayout.Button("Clear", EditorStyles.toolbarButton, GUILayout.Width(50))) { if (EditorUtility.DisplayDialog("Clear Canvas", "This will delete all nodes of the currently viewing graph!\nAre you sure?", "YES", "NO!")) { ClearGraph(); e.Use(); return; } } GUILayout.EndHorizontal(); GUI.backgroundColor = Color.white; }
public static void Editor_CreateGraph() { var newGraph = EditorUtils.AddScriptableComponent <DialogueTree>(new GameObject("DialogueTree")); UnityEditor.Selection.activeObject = newGraph; }