void OnSceneGUI(SceneView sceneView) { database = (PathDatabase)target; if ((pathIndex < database.paths.Count) && (pathIndex >= 0)) { if (database.paths[pathIndex] != null) { Path path = database.paths[pathIndex]; Handles.color = path.color; for (int i = 0; i < path.points.Count; i++) { Handles.DrawWireCube(path.points[i], new Vector3(1f, 1f, 1f)); path.points[i] = Handles.PositionHandle(path.points[i], new Quaternion(0f, 0f, 0f, 1f)); if (i < path.points.Count - 1) { Handles.DrawLine(path.points[i], path.points[i + 1]); } else if (i == path.points.Count - 1) { Handles.DrawLine(path.points[i], path.points[0]); } Handles.Label(path.points[i], i.ToString()); } database.paths[pathIndex] = path; } } }
public override void OnInspectorGUI() { database = (PathDatabase)target; if (database.paths == null) { database.paths = new List <Path> (); } bool valueChanged = false; for (int i = 0; i < database.paths.Count; i++) { GUI.backgroundColor = new Color(0.6f, 0.6f, 0.5f, 1f); if (pathIndex == i) { GUI.backgroundColor = new Color(0.75f, 0.75f, 0.75f, 1f); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button(database.paths[i].name, EditorStyles.toolbarButton)) { pathIndex = -1; } else if (GUILayout.Button("x", EditorStyles.toolbarButton, GUILayout.Width(24))) { database.paths.RemoveAt(i); pathIndex = -1; valueChanged = true; } EditorGUILayout.EndHorizontal(); if (pathIndex != -1) { EditorGUI.BeginChangeCheck(); database.paths[i].name = EditorGUILayout.TextField(database.paths[i].name, EditorStyles.toolbarTextField); database.paths[i].color = EditorGUILayout.ColorField("Colour", database.paths[i].color); if (EditorGUI.EndChangeCheck()) { valueChanged = true; } int newPointIndex = -1; if (database.paths[i].points == null) { database.paths[i].points = new List <Vector3> (); } for (int j = 0; j < database.paths[i].points.Count; j++) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(j.ToString(), GUILayout.Width(16)); EditorGUI.BeginChangeCheck(); database.paths[i].points[j] = EditorGUILayout.Vector3Field("", database.paths[i].points[j]); if (EditorGUI.EndChangeCheck()) { valueChanged = true; } if (GUILayout.Button("+", EditorStyles.toolbarButton, GUILayout.Width(20))) { newPointIndex = j; valueChanged = true; } if (GUILayout.Button("x", EditorStyles.toolbarButton, GUILayout.Width(20))) { database.paths[i].points.RemoveAt(j); valueChanged = true; } EditorGUILayout.EndHorizontal(); } if (newPointIndex >= 0) { database.paths[i].points.Insert(newPointIndex, database.paths[i].points[newPointIndex]); } else if (GUILayout.Button("+", EditorStyles.toolbarButton)) { if (database.paths[i].points.Count == 0) { database.paths[i].points.Add(new Vector3()); } else { database.paths[i].points.Add(database.paths[i].points[database.paths[i].points.Count - 1]); } valueChanged = true; } } GUILayout.Space(24); GUI.backgroundColor = new Color(0.6f, 0.6f, 0.5f, 1f); } else if (GUILayout.Button(database.paths[i].name, EditorStyles.toolbarButton)) { pathIndex = i; } } if (GUILayout.Button("+", EditorStyles.toolbarButton)) { database.paths.Add(new Path()); valueChanged = true; } if (valueChanged) { AssetDatabase.Refresh(); EditorUtility.SetDirty(database); AssetDatabase.SaveAssets(); } }