// Updates the Editor GUI public override void OnInspectorGUI() { serializedObject.Update(); CustomTerrain terrain = (CustomTerrain)target; GUILayout.Label("Terrain generation", EditorStyles.boldLabel); //Random Terrain showRandom = EditorGUILayout.Foldout(showRandom, "Random"); if (showRandom) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set Heights by Random Values", EditorStyles.boldLabel); EditorGUILayout.PropertyField(randomHeightRange); if (GUILayout.Button("Random Heights")) { terrain.RandomTerrain(); } } //Texture Terrain showTexture = EditorGUILayout.Foldout(showTexture, "Texture"); if (showTexture) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set Heights by Texture", EditorStyles.boldLabel); EditorGUILayout.PropertyField(heightMapImage); EditorGUILayout.PropertyField(heightMapScale); if (GUILayout.Button("Load Texture")) { terrain.TextureTerrain(); } } //PerlinNoise Terrain showPerlinNoise = EditorGUILayout.Foldout(showPerlinNoise, "Perlin Noise"); if (showPerlinNoise) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set Heights by Perlin Noise", EditorStyles.boldLabel); EditorGUILayout.Slider(perlinScaleX, 0, 0.05f, new GUIContent("X Scale")); EditorGUILayout.Slider(perlinScaleY, 0, 0.05f, new GUIContent("Y Scale")); EditorGUILayout.IntSlider(perlinOffsetX, 0, 1000, new GUIContent("X Offset")); EditorGUILayout.IntSlider(perlinOffsetY, 0, 1000, new GUIContent("Y Offset")); EditorGUILayout.IntSlider(perlinOctaves, 0, 10, new GUIContent("Octaves")); EditorGUILayout.Slider(perlinPersistance, 0.1f, 10, new GUIContent("Persistance")); EditorGUILayout.Slider(perlinHeightScale, 0, 1, new GUIContent("HeightScale")); EditorGUILayout.Slider(perlinFrequency, 0, 3, new GUIContent("Frequency")); if (GUILayout.Button("Generate")) { terrain.PerlinNoiseTerrain(); } } //Multiple PerlinNoise Terrain showMultiplePerlinNoise = EditorGUILayout.Foldout(showMultiplePerlinNoise, "Multiple Perlin Noise"); if (showMultiplePerlinNoise) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set Heights by Multiple Perlin Noises", EditorStyles.boldLabel); perlinParameterTable = GUITableLayout.DrawTable(perlinParameterTable, serializedObject.FindProperty("perlinParamList")); GUILayout.Space(20); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Add")) { terrain.AddNewPerlin(); } if (GUILayout.Button("Remove")) { terrain.RemovePerlin(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Generate")) { terrain.MultiplePerlinNoiseTerrain(); } } //Voronoi Terrain showVoronoi = EditorGUILayout.Foldout(showVoronoi, "Voronoi"); if (showVoronoi) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set New Voronoi Point", EditorStyles.boldLabel); EditorGUILayout.IntSlider(voronoiPeakCount, 1, 10, new GUIContent("Peaks")); EditorGUILayout.Slider(voronoiFallOff, 0.1f, 10, new GUIContent("Fall off")); EditorGUILayout.Slider(voronoiDropOff, 0.1f, 10, new GUIContent("Drop off")); EditorGUILayout.Slider(voronoiMinHeight, 0, 1, new GUIContent("Min Height")); EditorGUILayout.Slider(voronoiMaxHeight, 0, 1, new GUIContent("Max Height")); EditorGUILayout.PropertyField(voronoiType); if (GUILayout.Button("Generate")) { terrain.VoronoiTerrain(); } } //MidPointDisplacement Terrain showmMPD = EditorGUILayout.Foldout(showmMPD, "Mid Point Displacement"); if (showmMPD) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set Mid Point Displacement", EditorStyles.boldLabel); EditorGUILayout.Slider(mpdHeightMin, -10, 5, "Min Height"); EditorGUILayout.Slider(mpdHeightMax, -5, 10, "Max Height"); EditorGUILayout.Slider(mpdHeightDampener, 0, 5, "Dampener"); EditorGUILayout.Slider(mpdRoughness, 0, 5, "Roughness"); if (GUILayout.Button("Generate")) { terrain.MPDTerrain(); } } //MidPointDisplacement Terrain showSmooth = EditorGUILayout.Foldout(showSmooth, "Smooth"); if (showSmooth) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Smooth Terrain", EditorStyles.boldLabel); EditorGUILayout.IntSlider(smoothIterations, 1, 10, "Iterations"); if (GUILayout.Button("Smooth")) { terrain.SmoothTerrain(); } } //Erosion showErosion = EditorGUILayout.Foldout(showErosion, "Erosion"); if (showErosion) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Erode Terrain", EditorStyles.boldLabel); EditorGUILayout.PropertyField(erosionType); EditorGUILayout.IntSlider(erosionDroplets, 100, 6000, "Droplets"); EditorGUILayout.IntSlider(erosionSpringsPerDroplet, 1, 5, "Springs"); EditorGUILayout.Slider(erosionStrength, 0.001f, 0.1f, "Strength"); EditorGUILayout.Slider(erosionSolubility, 0.0001f, 0.1f, "Solubility"); if (GUILayout.Button("Erode")) { terrain.Erode(); } } GUILayout.Label("Terrain texturing", EditorStyles.boldLabel); // SplatMaps showSplatMaps = EditorGUILayout.Foldout(showSplatMaps, "Splat Maps"); if (showSplatMaps) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Splat Maps", EditorStyles.boldLabel); EditorGUILayout.Slider(splatOffset, 0f, 0.1f, new GUIContent("Offset")); EditorGUILayout.Slider(splatNoiseScale, 0f, 0.1f, new GUIContent("Noise Scale")); EditorGUILayout.Slider(splatNoiseX, 0f, 2f, new GUIContent("Noise X")); EditorGUILayout.Slider(splatNoiseY, 0f, 2f, new GUIContent("Noise Y")); splatMapTable = GUITableLayout.DrawTable(splatMapTable, serializedObject.FindProperty("splatHeights")); GUILayout.Space(20); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Add")) { terrain.AddNewSplatHeight(); } if (GUILayout.Button("Remove")) { terrain.RemoveSplatHeight(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply Splatmaps")) { terrain.SplatMaps(); } } GUILayout.Label("Details", EditorStyles.boldLabel); showWater = EditorGUILayout.Foldout(showWater, "Water"); if (showWater) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set Water", EditorStyles.boldLabel); EditorGUILayout.PropertyField(waterObject); EditorGUILayout.PropertyField(shoreLineMaterial); EditorGUILayout.Slider(waterHeight, 0, 1, "Water Height"); if (GUILayout.Button("River")) { terrain.River(); } if (GUILayout.Button("Set Water")) { terrain.SetWater(); //terrain.SetShoreline(); } } showVegetation = EditorGUILayout.Foldout(showVegetation, "Vegetation"); if (showVegetation) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set Vegetation", EditorStyles.boldLabel); EditorGUILayout.IntSlider(vegetationMaxTrees, 100, 10000, "Max Trees"); EditorGUILayout.IntSlider(vegetationTreeSpacing, 1, 50, "Tree Spacing"); vegetationRules = GUITableLayout.DrawTable(vegetationRules, serializedObject.FindProperty("vegetationRules")); GUILayout.Space(20); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Add")) { terrain.AddNewVegetationMesh(); } if (GUILayout.Button("Remove")) { terrain.RemoveVegetationMesh(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply Vegetation")) { terrain.SetVegetation(); } } //Reset Terrain EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); EditorGUILayout.PropertyField(resetTerrain); if (GUILayout.Button("Reset Terrain")) { terrain.ResetTerrain(); } if (GUILayout.Button("Generate Random Terrain")) { terrain.GenerateRandomTerrain(); } serializedObject.ApplyModifiedProperties(); }