public override void OnInspectorGUI() { //don't draw inspector fields if the path contains less than 2 points //(a path with less than 2 points really isn't a path) if (script.bPoints.Count < 2) { //button to create path manually if (GUILayout.Button("Create Path from Children")) { Undo.RecordObject(script, "Create Path"); script.Create(); SceneView.RepaintAll(); } return; } //create new checkboxes for path gizmo property script.showHandles = EditorGUILayout.Toggle("Show Handles", script.showHandles); script.connectHandles = EditorGUILayout.Toggle("Connect Handles", script.connectHandles); script.drawCurved = EditorGUILayout.Toggle("Draw Smooth Lines", script.drawCurved); script.drawDirection = EditorGUILayout.Toggle("Draw Direction", script.drawDirection); //create new color fields for editing path gizmo colors script.color1 = EditorGUILayout.ColorField("Color1", script.color1); script.color2 = EditorGUILayout.ColorField("Color2", script.color2); script.color3 = EditorGUILayout.ColorField("Color3", script.color3); //calculate path length of all waypoints float pathLength = WaypointManager.GetPathLength(script.pathPoints); GUILayout.Label("Path Length: " + pathLength); float thisDetail = script.pathDetail; //slider to modify the smoothing factor of the final path, //round because of path point imprecision placement (micro loops) script.pathDetail = EditorGUILayout.Slider("Path Detail", script.pathDetail, 0.5f, 10); script.pathDetail = Mathf.Round(script.pathDetail * 10f) / 10f; //toggle custom detail when modifying the whole path if (thisDetail != script.pathDetail) { script.customDetail = false; } //draw custom detail settings DetailSettings(); //button for switching over to the WaypointManager for further path editing if (GUILayout.Button("Continue Editing")) { Selection.activeGameObject = (GameObject.FindObjectOfType(typeof(WaypointManager)) as WaypointManager).gameObject; WaypointEditor.ContinuePath(script); } //more path modifiers DrawPathOptions(); EditorGUILayout.Space(); //waypoint index header GUILayout.Label("Waypoints: ", EditorStyles.boldLabel); //loop through the waypoint array for (int i = 0; i < script.bPoints.Count; i++) { GUILayout.BeginHorizontal(); //indicate each array slot with index number in front of it GUILayout.Label(i + ".", GUILayout.Width(20)); //create an object field for every waypoint EditorGUILayout.ObjectField(script.bPoints[i].wp, typeof(Transform), true); //display an "Add Waypoint" button for every array row except the last one //on click we call AddWaypointAtIndex() to insert a new waypoint slot AFTER the selected slot if (i < script.bPoints.Count && GUILayout.Button("+", GUILayout.Width(30f))) { AddWaypointAtIndex(i); break; } //display an "Remove Waypoint" button for every array row except the first and last one //on click we call RemoveWaypointAtIndex() to delete the selected waypoint slot if (i > 0 && i < script.bPoints.Count - 1 && GUILayout.Button("-", GUILayout.Width(30f))) { RemoveWaypointAtIndex(i); break; } GUILayout.EndHorizontal(); } //recalculate on inspector changes if (GUI.changed) { script.CalculatePath(); EditorUtility.SetDirty(target); } }
//called whenever the inspector gui gets rendered public override void OnInspectorGUI() { //this pulls the relative variables from unity runtime and stores them in the object m_Object.Update(); //get waypoint array var waypoints = GetWaypointArray(); //don't draw inspector fields if the path contains less than 2 points //(a path with less than 2 points really isn't a path) if (m_WaypointsCount.intValue < 2) { //button to create path manually if (GUILayout.Button("Create Path from Children")) { Undo.RecordObjects(waypoints, "Create Path"); (m_Object.targetObject as PathManager).Create(); SceneView.RepaintAll(); } return; } //create new checkboxes for path gizmo property m_Check1.boolValue = EditorGUILayout.Toggle("Draw Smooth Lines", m_Check1.boolValue); m_Check2.boolValue = EditorGUILayout.Toggle("Draw Direction", m_Check2.boolValue); //create new property fields for editing waypoint gizmo colors EditorGUILayout.PropertyField(m_Color1); EditorGUILayout.PropertyField(m_Color2); //calculate path length of all waypoints Vector3[] wpPositions = new Vector3[waypoints.Length]; for (int i = 0; i < waypoints.Length; i++) { wpPositions[i] = waypoints[i].position; } float pathLength = WaypointManager.GetPathLength(wpPositions); //path length label, show calculated path length GUILayout.Label("Path Length: " + pathLength); //button for switching over to the WaypointManager for further path editing if (GUILayout.Button("Continue Editing")) { Selection.activeGameObject = (GameObject.FindObjectOfType(typeof(WaypointManager)) as WaypointManager).gameObject; WaypointEditor.ContinuePath(m_Object.targetObject as PathManager); } //more path modifiers DrawPathOptions(); EditorGUILayout.Space(); //waypoint index header GUILayout.Label("Waypoints: ", EditorStyles.boldLabel); //loop through the waypoint array for (int i = 0; i < waypoints.Length; i++) { GUILayout.BeginHorizontal(); //indicate each array slot with index number in front of it GUILayout.Label(i + ".", GUILayout.Width(20)); //create an object field for every waypoint EditorGUILayout.ObjectField(waypoints[i], typeof(Transform), true); //display an "Add Waypoint" button for every array row except the last one if (i < waypoints.Length && GUILayout.Button("+", GUILayout.Width(30f))) { AddWaypointAtIndex(i); break; } //display an "Remove Waypoint" button for every array row except the first and last one if (i > 0 && i < waypoints.Length - 1 && GUILayout.Button("-", GUILayout.Width(30f))) { RemoveWaypointAtIndex(i); break; } GUILayout.EndHorizontal(); } //we push our modified variables back to our serialized object m_Object.ApplyModifiedProperties(); }