public override void OnInspectorGUI() { int wSize = (int)(EditorGUIUtility.currentViewWidth - 100); serializedObject.Update(); CustomTerrain terrain = (CustomTerrain)target; // Scrollbar starting code Rect r = EditorGUILayout.BeginVertical(); scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(r.width), GUILayout.Height(r.height)); EditorGUI.indentLevel++; EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); showRandom = EditorGUILayout.Foldout(showRandom, "RandomGenProps"); if (showRandom) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set Height Randomly Between Two Values", EditorStyles.boldLabel); EditorGUILayout.PropertyField(randomHeightRange); if (GUILayout.Button("Gen Random Heights")) { terrain.RandomTerrain(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); showLoadHeights = EditorGUILayout.Foldout(showLoadHeights, "ImageGenProps"); if (showLoadHeights) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Load Height From Texture", EditorStyles.boldLabel); EditorGUILayout.PropertyField(heightMapImage); EditorGUILayout.PropertyField(heightMapScale); if (GUILayout.Button("Load Texture Heights")) { terrain.LoadTexture(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); showPerlin = EditorGUILayout.Foldout(showPerlin, "PerlinGenProps"); if (showPerlin) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set Height Based On Perlin Noise", EditorStyles.boldLabel); EditorGUILayout.Slider(perlinXScale, 0.0f, 1.0f, new GUIContent("X Scale")); EditorGUILayout.Slider(perlinYScale, 0.0f, 1.0f, new GUIContent("Y Scale")); EditorGUILayout.IntSlider(perlinOffsetX, 0, 10000, new GUIContent("X Offset")); EditorGUILayout.IntSlider(perlinOffsetY, 0, 10000, new GUIContent("Y Offset")); EditorGUILayout.IntSlider(perlinOctaves, 1, 10, new GUIContent("Octaves")); EditorGUILayout.Slider(perlinPersistance, 0.1f, 10.0f, new GUIContent("Persistance")); EditorGUILayout.Slider(perlinHeightScale, 0.0f, 1.0f, new GUIContent("Perlin Height Scale")); if (GUILayout.Button("Gen Perlin Heights")) { terrain.Perlin(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); showMultiPerlin = EditorGUILayout.Foldout(showMultiPerlin, "MultiPerlinGenProps"); if (showMultiPerlin) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set Height Based On 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("Gen Multi Perlin Heights")) { terrain.MultiplePerlinTerrain(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); showVoronoi = EditorGUILayout.Foldout(showVoronoi, "VoronoiGenProps"); if (showVoronoi) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set Height Based On Voronoi Noise", EditorStyles.boldLabel); EditorGUILayout.IntSlider(voronoiPeaks, 1, 10, new GUIContent("Peaks")); EditorGUILayout.Slider(voronoiMinHeight, 0.0f, 1.0f, new GUIContent("Min Height")); EditorGUILayout.Slider(voronoiMaxHeight, 0.0f, 1.0f, new GUIContent("Max Height")); EditorGUILayout.Slider(voronoiFallOff, 0.0f, 10.0f, new GUIContent("Fall Off")); EditorGUILayout.Slider(voronoiDropOff, 0.0f, 10.0f, new GUIContent("Drop Off")); EditorGUILayout.PropertyField(voronoiType); if (GUILayout.Button("Gen Voronoi Heights")) { terrain.Voronoi(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); showMPD = EditorGUILayout.Foldout(showMPD, "MPDGenProps"); if (showMPD) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set Height Base On MPD ", EditorStyles.boldLabel); EditorGUILayout.PropertyField(MPDHeightMin); EditorGUILayout.PropertyField(MPDHeightMax); EditorGUILayout.PropertyField(MPDHeightDampenerPower); EditorGUILayout.PropertyField(MPDRoughness); if (GUILayout.Button("MPD")) { terrain.MPD(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); showSplatMap = EditorGUILayout.Foldout(showSplatMap, "SplatMapProps"); if (showSplatMap) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Texture The Terrain With Splat Map", EditorStyles.boldLabel); splatMapTable = GUITableLayout.DrawTable(splatMapTable, serializedObject.FindProperty("splatHeights")); GUILayout.Space(20); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("+")) { terrain.AddNewSplatHeight(); } if (GUILayout.Button("-")) { terrain.RemoveSplatHeight(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply SplatMap")) { terrain.SplatMaps(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); showVegetation = EditorGUILayout.Foldout(showVegetation, "VegGenProps"); if (showVegetation) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Generate Vegetation", EditorStyles.boldLabel); EditorGUILayout.IntSlider(vegMaxTrees, 0, 10000, new GUIContent("Max Trees")); EditorGUILayout.IntSlider(vegTreeSpacing, 2, 20, new GUIContent("Tree Spacing")); vegetationTable = GUITableLayout.DrawTable(vegetationTable, serializedObject.FindProperty("vegetationList")); GUILayout.Space(20); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("+")) { terrain.AddNewVegetation(); } if (GUILayout.Button("-")) { terrain.RemoveVegetation(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Generate Vegetation")) { terrain.PlaceVegetation(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); showDetail = EditorGUILayout.Foldout(showDetail, "DetailGenProps"); if (showDetail) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Generate Detail", EditorStyles.boldLabel); EditorGUILayout.IntSlider(maxDetails, 0, 10000, new GUIContent("Max Detail")); terrain.GetComponent <Terrain>().detailObjectDistance = maxDetails.intValue; EditorGUILayout.IntSlider(detailSpacing, 2, 20, new GUIContent("Detail Spacing")); detailTable = GUITableLayout.DrawTable(detailTable, serializedObject.FindProperty("detailList")); GUILayout.Space(20); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("+")) { terrain.AddNewDetails(); } if (GUILayout.Button("-")) { terrain.RemoveDetails(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Generate Details")) { terrain.PlaceDetails(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); showWater = EditorGUILayout.Foldout(showWater, "WaterGenProps"); if (showWater) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Generate Water", EditorStyles.boldLabel); EditorGUILayout.Slider(waterHeight, 0.0f, 1.0f, new GUIContent("Water Height")); EditorGUILayout.PropertyField(waterGO); if (GUILayout.Button("Add Water")) { terrain.AddWater(); } EditorGUILayout.PropertyField(shoreLineMat); if (GUILayout.Button("Add Shore")) { terrain.DrawShoreLine(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); showErosion = EditorGUILayout.Foldout(showErosion, "ErosionProps"); if (showErosion) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Erode Landscape", EditorStyles.boldLabel); EditorGUILayout.PropertyField(erosionType); EditorGUILayout.Slider(erosionStrength, 0.0f, 1.0f, new GUIContent("Erosion Strength")); EditorGUILayout.Slider(erosionAmount, 0.0f, 1.0f, new GUIContent("Erosion Amount")); EditorGUILayout.Slider(erosionSolubility, 0.001f, 1.0f, new GUIContent("Solubility")); EditorGUILayout.IntSlider(erosionDroplets, 0, 500, new GUIContent("Droplets")); EditorGUILayout.IntSlider(erosionsRiverSprings, 0, 20, new GUIContent("Springs Per River")); EditorGUILayout.IntSlider(erosionSmoothAmount, 0, 10, new GUIContent("Smooth Amount")); if (GUILayout.Button("Erode")) { terrain.Erode(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); showClouds = EditorGUILayout.Foldout(showClouds, "CloudProps"); if (showClouds) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Generate Clouds In The Sky", EditorStyles.boldLabel); EditorGUILayout.PropertyField(numClouds, new GUIContent("Number of Clouds")); EditorGUILayout.PropertyField(particlesPerCloud, new GUIContent("Particles Per Cloud")); EditorGUILayout.PropertyField(cloudScaleMin, new GUIContent("Cloud Min Size")); EditorGUILayout.PropertyField(cloudScaleMax, new GUIContent("Cloud max Size")); EditorGUILayout.PropertyField(cloudMat, true); EditorGUILayout.PropertyField(cloudShadowMat, true); EditorGUILayout.PropertyField(cloudColor, new GUIContent("Color")); EditorGUILayout.PropertyField(cloudLining, new GUIContent("Lining")); EditorGUILayout.PropertyField(cloudStartSize, new GUIContent("Cloud Particle Size")); EditorGUILayout.PropertyField(cloudMinSpeed, new GUIContent("Min Speed")); EditorGUILayout.PropertyField(cloudMaxSpeed, new GUIContent("Max Speed")); EditorGUILayout.PropertyField(cloudRange, new GUIContent("Dst Travelled")); if (GUILayout.Button("Generate Clouds")) { terrain.GenerateClouds(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); showSmooth = EditorGUILayout.Foldout(showSmooth, "SmoothProps"); if (showSmooth) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Smooth The Terrain", EditorStyles.boldLabel); EditorGUILayout.IntSlider(smoothAmount, 1, 10, new GUIContent("Smooth Amount")); if (GUILayout.Button("Smooth")) { terrain.SmoothTerrain(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); EditorGUILayout.PropertyField(resetBeforeGen); if (GUILayout.Button("Reset Terrain")) { terrain.ResetTerrain(); } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); showHeightMap = EditorGUILayout.Foldout(showHeightMap, "ShowHeightMap"); if (showHeightMap) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.Label("View The Height Map", EditorStyles.boldLabel, GUILayout.Width(wSize / 2)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.Label(heightMapTexture, GUILayout.Width(wSize), GUILayout.Height(wSize)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Refresh", GUILayout.Width(wSize))) { RefreshHeightMapDisplay(terrain); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); } //Scrollbar ending code EditorGUILayout.EndScrollView(); EditorGUILayout.EndVertical(); serializedObject.ApplyModifiedProperties(); }