public override void OnInspectorGUI() { // Updates all serialized values at the beginning of the function. serializedObject.Update(); // Get the CustomTerrain script. CustomTerrain terrain = (CustomTerrain)target; // Reset the terrain or not before generating a new terrain. EditorGUILayout.PropertyField(resetTerrain); // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); // Create a foldout option in the inspector. showRandom = EditorGUILayout.Foldout(showRandom, "Random"); // Foldout is open. if (showRandom) { // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); // Create a label in the inspector. GUILayout.Label("Set Heights Between Random Values", EditorStyles.boldLabel); // Display the property field. EditorGUILayout.PropertyField(randomHeightRange); // Generate random terrain height map. if (GUILayout.Button("Random Heights")) { // Create a random terrain. terrain.RandomTerrain(); } // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); } showLoadHeights = EditorGUILayout.Foldout(showLoadHeights, "Load Heights"); if (showLoadHeights) { // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Load Heights From Texture", EditorStyles.boldLabel); EditorGUILayout.PropertyField(heightMapImage); EditorGUILayout.PropertyField(heightMapScale); if (GUILayout.Button("Load Texture")) { terrain.LoadTexture(); } // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); } showPerlinNoise = EditorGUILayout.Foldout(showPerlinNoise, "Single Perlin Noise"); if (showPerlinNoise) { // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Perlin Noise", EditorStyles.boldLabel); EditorGUILayout.Slider(perlinXScale, 0, 1, new GUIContent("X Scale")); EditorGUILayout.Slider(perlinYScale, 0, 1, new GUIContent("Y Scale")); EditorGUILayout.IntSlider(perlinOffsetX, 0, 10000, new GUIContent("Offset X")); EditorGUILayout.IntSlider(perlinOffsetY, 0, 10000, new GUIContent("Offset Y")); EditorGUILayout.IntSlider(perlinOctaves, 0, 10, new GUIContent("Octaves")); EditorGUILayout.Slider(perlinPersistance, 0, 10, new GUIContent("Persistance")); EditorGUILayout.Slider(perlinHeightScale, 0, 1, new GUIContent("Height Scale")); if (GUILayout.Button("Simple Perlin")) { terrain.SimplePerlin(); } if (GUILayout.Button("Fractal Brownian Motion Perlin")) { terrain.FractaBrownianMotionPerlin(); } // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); } showMultiplePerlinNoise = EditorGUILayout.Foldout(showMultiplePerlinNoise, "Multiple Perlin Noise"); if (showMultiplePerlinNoise) { // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Multiple Perlin Noise", EditorStyles.boldLabel); perlinParameterTable = GUITableLayout.DrawTable(perlinParameterTable, serializedObject.FindProperty("perlinParameters")); GUILayout.Space(20); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("+")) { terrain.AddNewPerlin(); } if (GUILayout.Button("-")) { terrain.RemovePerlin(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply Multiple Perlin")) { terrain.MultiplePerlin(); } // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); } // Create a foldout option in the inspector. showVoronoi = EditorGUILayout.Foldout(showVoronoi, "Voronoi"); // Foldout is open. if (showVoronoi) { // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); EditorGUILayout.IntSlider(voronoiPeaks, 1, 10, new GUIContent("Peak Count")); EditorGUILayout.Slider(voronoiFallOff, 0.0f, 10.0f, new GUIContent("Fall Off")); EditorGUILayout.Slider(voronoiDropOff, 0.0f, 10.0f, new GUIContent("Drop Off")); EditorGUILayout.Slider(voronoiMinimumHeight, 0.0f, 1.0f, new GUIContent("Minimum Height")); EditorGUILayout.Slider(voronoiMaximumHeight, 0.0f, 1.0f, new GUIContent("Maximum Height")); EditorGUILayout.PropertyField(voronoiType); // Generate random terrain height map. if (GUILayout.Button("Voronoi")) { // Create a random terrain. terrain.Voronoi(); } // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); } showMidpointDisplacement = EditorGUILayout.Foldout(showMidpointDisplacement, "Midpoint Displacement"); if (showMidpointDisplacement) { // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); EditorGUILayout.PropertyField(midpointHeightMinimum); EditorGUILayout.PropertyField(midpointHeightMaximum); EditorGUILayout.PropertyField(midpointHeightDampenerPower); EditorGUILayout.PropertyField(midpointRoughness); if (GUILayout.Button("Midpoint Displacement")) { terrain.MidpointDisplacement(); } // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); } showSmooth = EditorGUILayout.Foldout(showSmooth, "Smooth"); if (showSmooth) { // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (GUILayout.Button("Smooth")) { terrain.Smooth(); } // Create horizontal divider (slider) bar. EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); } // Reset terrain height map to zero. if (GUILayout.Button("Reset Heights")) { // Reset the terrain. terrain.ResetTerrain(); } // Apply new changes at the end of the function. serializedObject.ApplyModifiedProperties(); return; }