public override void OnInspectorGUI() { Color myCol = new Color(.5f, .8f, .0f, 1f); // Light Green if (!EditorGUIUtility.isProSkin) { myCol = new Color(0.05f, 0.45f, 0.0f, 1.0f); // Dark Green } // Custom Label GUIStyle myLabel = new GUIStyle(EditorStyles.label); myLabel.normal.textColor = myCol; myLabel.onNormal.textColor = myCol; myLabel.fontStyle = FontStyle.Bold; GUILayout.Space(10); EditorGUILayout.LabelField("Geometry Brush Settings", myLabel); GUILayout.Space(4); GBSettings gbSettingsScript; if (GBUtils.GetGBSettingsScript(out gbSettingsScript) == false) { return; } //gbSettingsScript.parentObject = (GameObject)EditorGUILayout.ObjectField( "Parent object", gbSettingsScript.parentObject, typeof(GameObject), true ); //GUILayout.Space(4); if (GUILayout.Button("Open Geometry Brush Manager", GUILayout.Height(36))) { GBWindow.OpenWindow(); } EditorGUILayout.HelpBox("To enable or disable the tool, open up the geometry brush window.", MessageType.Info); GUILayout.Space(10); m_AdvancedMenuVisible = EditorGUILayout.BeginToggleGroup("Advanced Options", m_AdvancedMenuVisible); EditorGUILayout.HelpBox("The following fields control the possible min-max range of the values in the geometry brush window.", MessageType.Info); gbSettingsScript.minBrushSize = EditorGUILayout.FloatField("Min Brush Size", gbSettingsScript.minBrushSize); gbSettingsScript.maxBrushSize = EditorGUILayout.FloatField("Max Brush Size", gbSettingsScript.maxBrushSize); gbSettingsScript.minMinScale = EditorGUILayout.FloatField("Lowest Min Scale", gbSettingsScript.minMinScale); gbSettingsScript.maxMinScale = EditorGUILayout.FloatField("Highest Min Scale", gbSettingsScript.maxMinScale); gbSettingsScript.minMaxScale = EditorGUILayout.FloatField("Lowest Max Scale", gbSettingsScript.minMaxScale); gbSettingsScript.maxMaxScale = EditorGUILayout.FloatField("Highest Max Scale", gbSettingsScript.maxMaxScale); gbSettingsScript.minYOffset = EditorGUILayout.FloatField("Min Y Offset", gbSettingsScript.minYOffset); gbSettingsScript.maxYOffset = EditorGUILayout.FloatField("Max Y Offset", gbSettingsScript.maxYOffset); gbSettingsScript.minSpacing = EditorGUILayout.FloatField("Min Spacing", gbSettingsScript.minSpacing); gbSettingsScript.maxSpacing = EditorGUILayout.FloatField("Max Spacing", gbSettingsScript.maxSpacing); EditorGUILayout.EndToggleGroup(); if (GUI.changed) { EditorUtility.SetDirty(gbSettingsScript); } }
public static void AddSelectionsToList() { GBSettings gbSettingsScript; if (GBUtils.GetGBSettingsScript(out gbSettingsScript) == false) { return; } for (int i = 0; i < Selection.gameObjects.Length; i++) { gbSettingsScript.activeGeometry.Add(Selection.gameObjects[i]); } //// save path to objects as well int i1 = 0; foreach (UnityEngine.Object go in Selection.objects) { string assetPath = UnityEditor.AssetDatabase.GetAssetPath(go); gbSettingsScript.activeGeometryPaths.Add(assetPath); i1++; } }
public void OnGUI() { GBSettings gbSettingsScript; if (GBUtils.GetGBSettingsScript(out gbSettingsScript) == false) { return; } // Get the window. Rect thisRect = this.position; Color myback = GUI.backgroundColor; //Color myCol = Color.green; //new Color(0.8f,0.60f,1.3f,1.0f); Color myCol = new Color(.5f, .8f, .0f, 1f); // Light Green if (!EditorGUIUtility.isProSkin) { myCol = new Color(0.05f, 0.45f, 0.0f, 1.0f); // Dark Green } //Color myCol = new Color(2.0f,1.1f,0.0f,1.0f); //orig. yello orange //Color myCol = new Color(0.4f,0.62f,1.1f,1.0f); // orig. blue //Color myCol = new Color(1.0f,6.0f,0.0f,1.0f); // crazy // Custom Label GUIStyle myLabel = new GUIStyle(EditorStyles.label); myLabel.normal.textColor = myCol; myLabel.onNormal.textColor = myCol; myLabel.fontStyle = FontStyle.Bold; // GUILayout.Space(10); EditorGUILayout.LabelField("Parent Game Object", myLabel); GUILayout.Space(5); gbSettingsScript.parentObject = (GameObject)EditorGUILayout.ObjectField(gbSettingsScript.parentObject, typeof(GameObject), true); EditorGUILayout.HelpBox("Select a game object from the hierarchy which will become parent of all drawn objects.", MessageType.Info, true); GUILayout.Space(15); EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("Geometry Brush Settings", myLabel); GUILayout.Space(10); EditorGUI.BeginDisabledGroup(gbSettingsScript.raycastMode == GBSettings.RaycastMode.sphereCast); gbSettingsScript.brushSize = EditorGUILayout.Slider("Brush Size", gbSettingsScript.brushSize, gbSettingsScript.minBrushSize, gbSettingsScript.maxBrushSize); EditorGUI.EndDisabledGroup(); GUILayout.Space(5); gbSettingsScript.minScale = EditorGUILayout.Slider("Minimum Scale", gbSettingsScript.minScale, gbSettingsScript.minMinScale, gbSettingsScript.maxMinScale); gbSettingsScript.maxScale = EditorGUILayout.Slider("Maximum Scale", gbSettingsScript.maxScale, gbSettingsScript.minMaxScale, gbSettingsScript.maxMaxScale); gbSettingsScript.yOffset = EditorGUILayout.Slider("Ground Offset", gbSettingsScript.yOffset, gbSettingsScript.minYOffset, gbSettingsScript.maxYOffset); GUILayout.Space(5); GUILayout.Label("Random Rotation", GUILayout.Width(146)); GUILayout.Space(-18); EditorGUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(136)); gbSettingsScript.randomRotation = EditorGUILayout.Vector3Field("", gbSettingsScript.randomRotation); EditorGUILayout.EndHorizontal(); GUILayout.Space(18); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Raycast Mode", GUILayout.Width(146)); bool coneCast = (gbSettingsScript.raycastMode == GBSettings.RaycastMode.coneCast); coneCast = EditorGUILayout.Toggle("", coneCast, GUILayout.Width(14)); GUILayout.Label("Cone", GUILayout.Width(100)); if (coneCast) { gbSettingsScript.raycastMode = GBSettings.RaycastMode.coneCast; } bool sphereCast = (gbSettingsScript.raycastMode == GBSettings.RaycastMode.sphereCast); sphereCast = EditorGUILayout.Toggle("", sphereCast, GUILayout.Width(14)); if (sphereCast) { gbSettingsScript.raycastMode = GBSettings.RaycastMode.sphereCast; } GUILayout.Label("Sphere", GUILayout.Width(100)); EditorGUILayout.EndHorizontal(); GUILayout.Space(5); EditorGUILayout.BeginHorizontal(); GUILayout.Label("", GUILayout.Width(146)); gbSettingsScript.alignToNormal = EditorGUILayout.Toggle("", gbSettingsScript.alignToNormal, GUILayout.Width(14)); GUILayout.Label("Align to Normal", GUILayout.Width(100)); gbSettingsScript.preventOverlap = EditorGUILayout.Toggle("", gbSettingsScript.preventOverlap, GUILayout.Width(14)); GUILayout.Label("Prevent Overlap"); EditorGUILayout.EndHorizontal(); GUILayout.Space(5); if (gbSettingsScript.preventOverlap) { float geometrySpacingFloat = gbSettingsScript.spacing; geometrySpacingFloat = gbSettingsScript.spacing; geometrySpacingFloat = EditorGUILayout.Slider("Spacing", geometrySpacingFloat, gbSettingsScript.minSpacing, gbSettingsScript.maxSpacing); GBUtils.RoundToNearestDivisibleNumber(ref geometrySpacingFloat, 0.1f); gbSettingsScript.spacing = geometrySpacingFloat; EditorGUILayout.HelpBox("Spacing needs colliders attached to the objects which are drawn.", MessageType.Info, true); } EditorGUILayout.EndVertical(); GUILayout.Space(10); EditorGUILayout.BeginVertical(); if (gbSettingsScript.brushActive) { GUI.backgroundColor = Color.red; if (GUILayout.Button("Deactivate Brush", GUILayout.Height(36))) { gbSettingsScript.brushActive = false; } GUI.backgroundColor = myback; } else { if (GUILayout.Button("Activate Brush", GUILayout.Height(36))) { gbSettingsScript.brushActive = true; } } EditorGUILayout.EndVertical(); EditorGUILayout.HelpBox("While active, Left Click to place objects, Ctrl + Left Click to delete.", MessageType.Info, true); GUILayout.Space(15); EditorGUILayout.LabelField("Assigned Objects", myLabel); GUILayout.Space(5); for (int i = 0; i < gbSettingsScript.activeGeometry.Count; i++) { GUI.backgroundColor = myCol; EditorGUILayout.BeginVertical("Box", GUILayout.MaxWidth(thisRect.width - 9.0f)); EditorGUILayout.BeginHorizontal(); GUI.backgroundColor = myback; // preview is not worth much as it is simply too dark //GUILayout.Box( EditorUtility.GetAssetPreview(gbSettingsScript.activeGeometry[i]), GUILayout.Width(46), GUILayout.Height(46) ); EditorGUILayout.LabelField(gbSettingsScript.activeGeometry[i].name, GUILayout.MinWidth(thisRect.width - 94.0f)); if (GUILayout.Button("Remove", GUILayout.Width(75))) { // remove this element from the list. gbSettingsScript.activeGeometry.RemoveAt(i); // gbSettingsScript.activeGeometryPaths.RemoveAt(i); } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); } GUILayout.Space(5); EditorGUILayout.BeginHorizontal(); EditorGUI.BeginDisabledGroup(!ValidateAddSelectionsToList()); if (GUILayout.Button("Add Selections to Brush", GUILayout.Height(28), GUILayout.Width(thisRect.width - 90.0f))) { AddSelectionsToList(); } EditorGUI.EndDisabledGroup(); if (GUILayout.Button("Remove all", GUILayout.Height(28), GUILayout.Width(77))) { gbSettingsScript.activeGeometry.Clear(); // gbSettingsScript.activeGeometryPaths.Clear(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.HelpBox("Select a prefab, .fbx or .ma in the Project Tab and click 'Add Selections to Brush'.", MessageType.Info, true); // Update the GBSettings object. if (GUI.changed) { EditorUtility.SetDirty(gbSettingsScript); } }
private void OnSceneGUI(SceneView sceneView) { GBSettings gbSettingsScript; if (GBUtils.GetGBSettingsScript(out gbSettingsScript) == false) { return; } if (gbSettingsScript.brushActive == false) { gbSettingsScript.gizmoActive = false; return; } if (Event.current.button == 1) { HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive)); return; } // enable rotation if (Event.current.alt) { gbSettingsScript.gizmoActive = false; return; } // delete? if (Event.current.control) { m_ControlHeld = true; gbSettingsScript.delete = true; } else { m_ControlHeld = false; gbSettingsScript.delete = false; } switch (Event.current.type) { case EventType.layout: HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive)); break; case EventType.mouseMove: HandleUtility.Repaint(); break; // start painting case EventType.mouseDrag: if (m_ControlHeld == false) { GBUtils.ApplyGeometryBrush(Event.current.mousePosition); } else { GBUtils.EraseGeometryBrush(Event.current.mousePosition); } break; case EventType.mouseUp: break; case EventType.mouseDown: if (m_ControlHeld == false) { GBUtils.ApplyGeometryBrush(Event.current.mousePosition); } else { GBUtils.EraseGeometryBrush(Event.current.mousePosition); } break; } // While hitting something, display the brush range. RaycastHit m_RaycastHit; Ray m_Ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); if (Physics.Raycast(m_Ray, out m_RaycastHit)) { gbSettingsScript.gizmoPos = m_RaycastHit.point; gbSettingsScript.gizmoActive = true; HandleUtility.Repaint(); } else { gbSettingsScript.gizmoActive = false; } }