public override void OnInspectorGUI() { Undo.RecordObject(owner, "Owner Inspector"); var label = EditorUtils.TypeName(owner.graphType); if (owner.behaviour == null) { EditorGUILayout.HelpBox(label + "Owner needs " + label + ". Assign or Create a new one", MessageType.Info); if (GUILayout.Button("CREATE NEW")) { if (owner.behaviour == null) { owner.behaviour = new GameObject(label).AddComponent(owner.graphType) as Graph; owner.behaviour.transform.parent = owner.transform; owner.behaviour.transform.localPosition = Vector3.zero; Undo.RegisterCreatedObjectUndo(owner.behaviour.gameObject, "New Graph"); } owner.behaviour.agent = owner; } owner.behaviour = (Graph)EditorGUILayout.ObjectField(label, owner.behaviour, owner.graphType, true); return; } GUILayout.Space(10); owner.behaviour.name = EditorGUILayout.TextField(label + " Name", owner.behaviour.name); if (string.IsNullOrEmpty(owner.behaviour.name)) { owner.behaviour.name = owner.behaviour.gameObject.name; } owner.behaviour.graphComments = GUILayout.TextArea(owner.behaviour.graphComments, GUILayout.Height(45)); EditorUtils.TextFieldComment(owner.behaviour.graphComments); GUI.backgroundColor = EditorUtils.lightBlue; if (GUILayout.Button("OPEN BEHAVIOUR")) { GraphEditor.OpenWindow(owner); } GUI.backgroundColor = Color.white; GUI.color = new Color(1, 1, 1, 0.5f); owner.behaviour = (Graph)EditorGUILayout.ObjectField("Current " + label, owner.behaviour, owner.graphType, true); GUI.color = Color.white; owner.blackboard = (Blackboard)EditorGUILayout.ObjectField("Blackboard", owner.blackboard, typeof(Blackboard), true); owner.onEnable = (GraphOwner.EnableAction)EditorGUILayout.EnumPopup("On Enable", owner.onEnable); owner.onDisable = (GraphOwner.DisableAction)EditorGUILayout.EnumPopup("On Disable", owner.onDisable); OnExtraOptions(); if (owner.behaviour != null && !(PrefabUtility.GetPrefabType(owner.behaviour) == PrefabType.Prefab) && Application.isPlaying) { var pressed = new GUIStyle(GUI.skin.GetStyle("button")); pressed.normal.background = GUI.skin.GetStyle("button").active.background; GUILayout.BeginHorizontal("box"); GUILayout.FlexibleSpace(); if (GUILayout.Button(EditorUtils.playIcon, owner.isRunning || owner.isPaused? pressed : "button")) { if (owner.isRunning || owner.isPaused) { owner.StopBehaviour(); } else { owner.StartBehaviour(); } } if (GUILayout.Button(EditorUtils.pauseIcon, owner.isPaused? pressed : "button")) { if (owner.isPaused) { owner.StartBehaviour(); } else { owner.PauseBehaviour(); } } OnGrapOwnerControls(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); } EditorUtils.EndOfInspector(); if (GUI.changed) { EditorUtility.SetDirty(owner); EditorUtility.SetDirty(owner.behaviour); } }