private void MidpointDisplacementGUI(CustomTerrain terrain) { midpointDisplacement = EditorGUILayout.Foldout(midpointDisplacement, "MidpointDisplacement"); if (midpointDisplacement) { GUILayout.Label("Midpoint Displacement", EditorStyles.boldLabel); EditorGUILayout.Slider(mpRoughtness, 0f, 5f, new GUIContent("roughtness")); EditorGUILayout.PropertyField(mpMinHeight, new GUIContent("MP Min Height")); EditorGUILayout.PropertyField(mpMaxHeight, new GUIContent("MP Max Height")); EditorGUILayout.PropertyField(mpDampererPower, new GUIContent("MP Damperer Power")); if (GUILayout.Button("Midpoint Displacement")) { terrain.MidpointDisplacement(); } } }
void MidpointDisplacement() { showMDP = EditorGUILayout.Foldout(showMDP, "Midpoint Displacement"); if (showMDP) { EditorGUILayout.Slider(mpdHeightMin, -2f, 0f, "Height Min"); EditorGUILayout.Slider(mpdHeightMax, 0f, 2f, "Height Max"); EditorGUILayout.Slider(mpdHeightDampenerPower, 0f, 5f, "Dampener Power"); EditorGUILayout.Slider(mpdRoughness, 0f, 5f, "Roughness"); EditorGUILayout.Slider(mpdRandomness, 0f, 1f, "Randomness"); if (GUILayout.Button("Midpoint Displacement")) { terrain.MidpointDisplacement(); } } }
public override void OnInspectorGUI() { 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.PropertyField(resetTerrain); showRandom = EditorGUILayout.Foldout(showRandom, "Random"); if (showRandom) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set Heights Between Random Values", EditorStyles.boldLabel); EditorGUILayout.PropertyField(randomHeightRange); if (GUILayout.Button("Random Heights")) { terrain.RandomTerrain(); } } showLoadHeights = EditorGUILayout.Foldout(showLoadHeights, "Load Heights"); if (showLoadHeights) { 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(); } } showPerlinNoise = EditorGUILayout.Foldout(showPerlinNoise, "Single Perlin Noise"); if (showPerlinNoise) { 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, 1, 10, new GUIContent("Octaves")); EditorGUILayout.Slider(perlinPersistance, 0.1f, 10, new GUIContent("Persistance")); EditorGUILayout.Slider(perlinHeightScale, 0, 1, new GUIContent("Height Scale")); if (GUILayout.Button("Perlin")) { terrain.Perlin(); } } showMultiplePerlin = EditorGUILayout.Foldout(showMultiplePerlin, "Multiple Perlin Noise"); if (showMultiplePerlin) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Mulitple 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.MultiplePerlinTerrain(); } } showVoronoi = EditorGUILayout.Foldout(showVoronoi, "Voronoi"); if (showVoronoi) { EditorGUILayout.IntSlider(voronoiPeaks, 1, 10, new GUIContent("Peak Count")); EditorGUILayout.Slider(voronoiFallOff, 0, 10, new GUIContent("Falloff")); EditorGUILayout.Slider(voronoiDropOff, 0, 10, new GUIContent("Dropoff")); EditorGUILayout.Slider(voronoiMinHeight, 0, 1, new GUIContent("Min Height")); EditorGUILayout.Slider(voronoiMaxHeight, 0, 1, new GUIContent("Max Height")); EditorGUILayout.PropertyField(voronoiType); if (GUILayout.Button("Voronoi")) { terrain.Voronoi(); } } showMPD = EditorGUILayout.Foldout(showMPD, "Midpoint Displacement"); if (showMPD) { EditorGUILayout.PropertyField(MPDheightMin); EditorGUILayout.PropertyField(MPDheightMax); EditorGUILayout.PropertyField(MPDheightDampenerPower); EditorGUILayout.PropertyField(MPDroughness); if (GUILayout.Button("MPD")) { terrain.MidpointDisplacement(); } } showSplatMaps = EditorGUILayout.Foldout(showSplatMaps, "Splat Maps"); if (showSplatMaps) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Splat Maps", EditorStyles.boldLabel); /*EditorGUILayout.Slider(splatOffset, 0, 0.1f, new GUIContent("Offset")); * EditorGUILayout.Slider(splatNoiseXScale, 0.001f, 1, new GUIContent("Noise X Scale")); * EditorGUILayout.Slider(splatNoiseYScale, 0.001f, 1, new GUIContent("Noise Y Scale")); * EditorGUILayout.Slider(splatNoiseScaler, 0, 1, new GUIContent("Noise Scaler"));*/ 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 SplatMaps")) { terrain.SplatMaps(); } } showVeg = EditorGUILayout.Foldout(showVeg, "Vegetation"); if (showVeg) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Vegetation", EditorStyles.boldLabel); EditorGUILayout.IntSlider(maxTrees, 0, 10000, new GUIContent("Maximum Trees")); EditorGUILayout.IntSlider(treeSpacing, 2, 20, new GUIContent("Trees Spacing")); vegMapTable = GUITableLayout.DrawTable(vegMapTable, serializedObject.FindProperty("vegetation")); GUILayout.Space(20); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("+")) { terrain.AddNewVegetaion(); } if (GUILayout.Button("-")) { terrain.RemoveVegetaion(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply Vegetation")) { terrain.PlantVegetaion(); } } showDetail = EditorGUILayout.Foldout(showDetail, "Details"); if (showDetail) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Detail", EditorStyles.boldLabel); EditorGUILayout.IntSlider(maxDetails, 0, 10000, new GUIContent("Maximum Details")); EditorGUILayout.IntSlider(detailSpacing, 1, 20, new GUIContent("Detail Spacing")); detailMapTable = GUITableLayout.DrawTable(detailMapTable, serializedObject.FindProperty("details")); terrain.GetComponent <Terrain>().detailObjectDistance = maxDetails.intValue; GUILayout.Space(20); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("+")) { terrain.AddNewDetails(); } if (GUILayout.Button("-")) { terrain.RemoveDetails(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply Details")) { terrain.AddDetails(); } } showSmooth = EditorGUILayout.Foldout(showSmooth, "Smooth Terrain"); if (showSmooth) { EditorGUILayout.IntSlider(smoothAmount, 1, 10, new GUIContent("smoothAmount")); if (GUILayout.Button("Smooth")) { terrain.SmoothTerrain(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (GUILayout.Button("Reset Terrain")) { terrain.ResetTerrain(); } // Display Height Map showHeightMap = EditorGUILayout.Foldout(showHeightMap, "Height Map"); if (showHeightMap) { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); int hmtSize = (int)(EditorGUIUtility.currentViewWidth - 100); GUILayout.Label(hmTexture, GUILayout.Width(hmtSize), GUILayout.Height(hmtSize)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Refresh", GUILayout.Width(hmtSize))) { float[,] heightMap = terrain.terrainData.GetHeights(0, 0, terrain.terrainData.heightmapWidth, terrain.terrainData.heightmapHeight); for (int y = 0; y < terrain.terrainData.heightmapHeight; ++y) { for (int x = 0; x < terrain.terrainData.heightmapWidth; ++x) { hmTexture.SetPixel(x, y, new Color(heightMap[x, y], heightMap[x, y], heightMap[x, y], 1)); } } hmTexture.Apply(); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); } //Scrollbar ending code EditorGUILayout.EndScrollView(); EditorGUILayout.EndVertical(); serializedObject.ApplyModifiedProperties(); }
Vector2 scrollPos; //keeps track of scroll bars position public override void OnInspectorGUI() { serializedObject.Update(); CustomTerrain terrain = (CustomTerrain)target; EditorGUILayout.PropertyField(resetTerrain); /* //scrollbar UI code start * Rect r = EditorGUILayout.BeginVertical(); * scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(r.width), GUILayout.Height(r.height)); * EditorGUI.indentLevel++; */ //foldout terrain for random height showRandom = EditorGUILayout.Foldout(showRandom, "Random"); if (showRandom) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set heights between random values", EditorStyles.boldLabel); EditorGUILayout.PropertyField(randomHeightRange); //on button click if (GUILayout.Button("Random heights")) { terrain.RandomTerrain(); } } //foldout terrain editor for input image showPerlinNoise = EditorGUILayout.Foldout(showPerlinNoise, "Single Perlin Noise"); if (showPerlinNoise) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Perlin noisee", EditorStyles.boldLabel); EditorGUILayout.Slider(perlinXScale, 0, 0.1f, new GUIContent("X scale")); EditorGUILayout.Slider(perlinYScale, 0, 0.1f, new GUIContent("Y scale")); EditorGUILayout.IntSlider(perlinXOffset, 0, 10000, new GUIContent("X noise")); EditorGUILayout.IntSlider(perlinYOffset, 0, 10000, new GUIContent("Y noise")); EditorGUILayout.IntSlider(perlinOctaves, 1, 10, new GUIContent("Octaves")); EditorGUILayout.Slider(perlinPersistance, 0, 10f, new GUIContent("Persistance")); EditorGUILayout.Slider(perlinHeightScale, 0, 1f, new GUIContent("Height scale")); EditorGUILayout.Slider(freqMultiplier, 0, 5f, new GUIContent("frequency Multiplier")); //on button click if (GUILayout.Button("Perlin")) { terrain.Perlin(); } } showMultiplePerlin = EditorGUILayout.Foldout(showMultiplePerlin, "Multiple Perlin Noise"); if (showMultiplePerlin) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Multiple Perlin Noise", EditorStyles.boldLabel); perlinParameterTable = GUITableLayout.DrawTable(perlinParameterTable, perlinParameters); GUILayout.Space(20); //formatting space so buttons dont appear on slider //this makes the plus and minus button next to each other horizontally on the gui EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("+")) { terrain.AddNewPerlin(); } if (GUILayout.Button("-")) { terrain.RemovePerlin(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply Multiple Perlin")) { terrain.MultiplePerlinTerrain(); } } showLoadHeights = EditorGUILayout.Foldout(showLoadHeights, "Load Height Map in"); if (showLoadHeights) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set heights from input image", EditorStyles.boldLabel); EditorGUILayout.PropertyField(heightMapImage); EditorGUILayout.PropertyField(heightMapScale); //on button click if (GUILayout.Button("Load Texture")) { terrain.LoadTexture(); } } showVoronoi = EditorGUILayout.Foldout(showVoronoi, "Voronoi"); if (showVoronoi) { EditorGUILayout.IntSlider(voronoiPeaks, 1, 10, new GUIContent("Peak count")); EditorGUILayout.Slider(voronoiFallOff, 0, 10, new GUIContent("FallOff")); EditorGUILayout.Slider(voronoiDropOff, 0, 10, new GUIContent("Dropoff")); EditorGUILayout.Slider(voronoiMaxHeight, 0, 1, new GUIContent("Max Height")); EditorGUILayout.Slider(voronoiMinHeight, 0, 1, new GUIContent("Min Height")); EditorGUILayout.PropertyField(voronoiType); if (GUILayout.Button("Generate peaks")) { terrain.Voronoi(); } } showMidpointDisplacement = EditorGUILayout.Foldout(showMidpointDisplacement, "Midpoint Displacement"); if (showMidpointDisplacement) { if (GUILayout.Button("MP displacement")) { terrain.MidpointDisplacement(); } } showSmooth = EditorGUILayout.Foldout(showSmooth, "Smooth"); if (showSmooth) { EditorGUILayout.IntSlider(smoothAmount, 1, 10, new GUIContent("Smooth iterations")); if (GUILayout.Button("Smooth")) { terrain.Smooth(); } } showSplatMaps = EditorGUILayout.Foldout(showSplatMaps, "Splat Maps"); if (showSplatMaps) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Splat Maps", EditorStyles.boldLabel); splatMapTable = GUITableLayout.DrawTable(splatMapTable, serializedObject.FindProperty("splatHeights")); GUILayout.Space(20); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("+")) { terrain.AddSplatHeight(); } if (GUILayout.Button("-")) { terrain.RemoveSplatHeight(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply Splatmaps")) { terrain.SplatMaps(); } } showTrees = EditorGUILayout.Foldout(showTrees, "show Trees"); if (showTrees) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("show Trees", EditorStyles.boldLabel); EditorGUILayout.IntSlider(maxTrees, 0, 10000, new GUIContent("Max Trees")); EditorGUILayout.IntSlider(treeSpacing, 2, 20, new GUIContent("Tree Spacing")); vegetation = GUITableLayout.DrawTable(vegetation, serializedObject.FindProperty("vegetation")); GUILayout.Space(20); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("+")) { terrain.AddVegetation(); } if (GUILayout.Button("-")) { terrain.RemoveVegetation(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply trees")) { terrain.PlantVegetation(); } } showDetail = EditorGUILayout.Foldout(showDetail, "Detail"); if (showDetail) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Detail", EditorStyles.boldLabel); EditorGUILayout.IntSlider(maxDetails, 0, 10000, new GUIContent("Maximum Details")); EditorGUILayout.IntSlider(detailSpacing, 1, 20, new GUIContent("Detail Spacing")); //this line is broken even copy and pasted,, detailMapTable = GUITableLayout.DrawTable(detailMapTable, serializedObject.FindProperty("details")); //sets the view distance of the details to the amount of objects so you can see all of them terrain.GetComponent <Terrain>().detailObjectDistance = maxDetails.intValue; GUILayout.Space(20); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("+")) { terrain.AddDetail(); } if (GUILayout.Button("-")) { terrain.RemoveDetail(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply Details")) { terrain.SpawnDetails(); } } showErosion = EditorGUILayout.Foldout(showErosion, "Erosion"); if (showErosion) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Erosion", EditorStyles.boldLabel); EditorGUILayout.PropertyField(erosionType); EditorGUILayout.IntSlider(erosionSmoothAmount, 0, 10, new GUIContent("Smooth AMount")); EditorGUILayout.Slider(erosionStrength, 0.01f, 1, new GUIContent("Erosion strength")); EditorGUILayout.IntSlider(springsPerDroplet, 0, 60, new GUIContent("Spring/droplet")); EditorGUILayout.Slider(solubility, 0, 1, new GUIContent("Solubility")); EditorGUILayout.IntSlider(droplets, 1, 10000, new GUIContent("Droplets")); EditorGUILayout.Slider(thermalStrength, 0, 1, new GUIContent("ThermalStrength")); if (GUILayout.Button("Erode")) { terrain.Erode(); } } //reset button seperate EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (GUILayout.Button("Reset Terrain")) { terrain.ResetTerrain(); } /*//scrollbar code END * EditorGUILayout.EndScrollView(); * EditorGUILayout.EndVertical(); */ serializedObject.ApplyModifiedProperties(); }
public override void OnInspectorGUI() { serializedObject.Update(); CustomTerrain terrain = (CustomTerrain)target; EditorGUILayout.PropertyField(resetTerrain); showRandom = EditorGUILayout.Foldout(showRandom, "Random"); if (showRandom) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set Heights Between Random Values", EditorStyles.boldLabel); EditorGUILayout.PropertyField(randomHeightRange); if (GUILayout.Button("Random Heights")) { terrain.RandomTerrain(); } } showLoadHeights = EditorGUILayout.Foldout(showLoadHeights, "Load Heights"); if (showLoadHeights) { 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(); } } showPerlin = EditorGUILayout.Foldout(showPerlin, "Single Perlin Noise"); if (showPerlin) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Perlin Noise Heights", EditorStyles.boldLabel); EditorGUILayout.Slider(perlinXScale, 0f, 0.1f, new GUIContent("X Scale")); EditorGUILayout.Slider(perlinYScale, 0f, 0.1f, new GUIContent("Y Scale")); EditorGUILayout.IntSlider(perlinOffsetX, 0, 10000, new GUIContent("X Offset")); EditorGUILayout.IntSlider(perlinOffsetY, 0, 10000, new GUIContent("Y Offset")); // Fractal Brownian Motion additions EditorGUILayout.IntSlider(perlinOctaves, 1, 10, new GUIContent("Octaves")); EditorGUILayout.Slider(perlinPersistance, 0.1f, 10, new GUIContent("Persistance")); EditorGUILayout.Slider(perlinHeightScale, 0, 1, new GUIContent("Height Scale")); if (GUILayout.Button("Perlin Noise")) { terrain.Perlin(); } } showMultiplePerlin = EditorGUILayout.Foldout(showMultiplePerlin, "Multiple Perlin Noise"); if (showMultiplePerlin) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Multiple Perlin Noise", EditorStyles.boldLabel); perlinParameterTable = GUITableLayout.DrawTable(perlinParameterTable, perlinParameters); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("+")) { terrain.AddNewPerlin(); } if (GUILayout.Button("-")) { terrain.RemovePerlin(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply Multiple Perlin")) { terrain.MultiplePerlinTerrain(); } } showVoronoi = EditorGUILayout.Foldout(showVoronoi, "Voronoi"); if (showVoronoi) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); EditorGUILayout.IntSlider(peakCount, 1, 10, new GUIContent("Peak Count")); EditorGUILayout.Slider(fallOff, 0f, 10f, new GUIContent("Falloff")); EditorGUILayout.Slider(dropOff, 0f, 10f, new GUIContent("Dropoff")); EditorGUILayout.Slider(minHeight, 0f, 1f, new GUIContent("Min Height")); EditorGUILayout.Slider(maxHeight, 0f, 1f, new GUIContent("Max Height")); EditorGUILayout.PropertyField(voronoiType); if (GUILayout.Button("Voronoi")) { terrain.Voronoi(); } } showMPD = EditorGUILayout.Foldout(showMPD, "Midpoint Displacement"); if (showMPD) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); EditorGUILayout.PropertyField(mdpMinHeight, new GUIContent("Min Height")); EditorGUILayout.PropertyField(mdpMaxHeight, new GUIContent("Max Height")); EditorGUILayout.PropertyField(roughness, new GUIContent("Roughness")); EditorGUILayout.PropertyField(heightDampenerPower, new GUIContent("Height Damp. Pow")); if (GUILayout.Button("MPD")) { terrain.MidpointDisplacement(); } } showSplatMaps = EditorGUILayout.Foldout(showSplatMaps, "Splat Maps"); if (showSplatMaps) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Splat Maps", EditorStyles.boldLabel); splatMapTable = GUITableLayout.DrawTable(splatMapTable, serializedObject.FindProperty("splatHeights")); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("+")) { terrain.AddNewSplatHeight(); } if (GUILayout.Button("-")) { terrain.RemoveSplatHeight(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply SplatMaps")) { terrain.SplatMaps(); } } showVegetation = EditorGUILayout.Foldout(showVegetation, "Vegetation"); if (showVegetation) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); EditorGUILayout.IntSlider(maxTrees, 100, 10000, new GUIContent("Max Trees")); EditorGUILayout.IntSlider(treeSpacing, 1, 100, new GUIContent("Tree Spacing")); GUILayout.Label("Vegetation", EditorStyles.boldLabel); vegetationTable = GUITableLayout.DrawTable(vegetationTable, serializedObject.FindProperty("vegetation")); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("+")) { terrain.AddNewVegetation(); } if (GUILayout.Button("-")) { terrain.RemoveVegetation(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply Vegetation")) { terrain.PlantVegetation(); } } showDetail = EditorGUILayout.Foldout(showDetail, "Detail"); if (showDetail) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); EditorGUILayout.IntSlider(maxDetails, 100, 10000, new GUIContent("Max Distance")); EditorGUILayout.IntSlider(detailSpacing, 1, 100, new GUIContent("Detail Spacing")); GUILayout.Label("Details", EditorStyles.boldLabel); detailsTable = GUITableLayout.DrawTable(detailsTable, serializedObject.FindProperty("details")); terrain.GetComponent <Terrain>().detailObjectDistance = maxDetails.intValue; GUILayout.Space(20); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("+")) { terrain.AddNewDetail(); } if (GUILayout.Button("-")) { terrain.RemoveDetails(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply Details")) { terrain.PlaceDetails(); } } showWater = EditorGUILayout.Foldout(showWater, "Water"); if (showWater) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Water", EditorStyles.boldLabel); EditorGUILayout.Slider(waterHeight, 0f, 1.0f, new GUIContent("Water Height")); EditorGUILayout.PropertyField(waterGO, new GUIContent("Water GO")); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Add Water")) { terrain.AddWater(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.PropertyField(shoreLineMaterial, new GUIContent("Shore Line Material")); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Add Shoreline")) { terrain.DrawShoreline(); } EditorGUILayout.EndHorizontal(); } showErosion = EditorGUILayout.Foldout(showErosion, "Erosion"); if (showErosion) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); EditorGUILayout.PropertyField(erosionType); EditorGUILayout.Slider(erosionStrength, 0f, 1.0f, new GUIContent("Erosion Strength")); EditorGUILayout.Slider(erosionAmount, 0f, 0.5f, new GUIContent("Erosion Amount")); EditorGUILayout.IntSlider(droplets, 1, 500, new GUIContent("Droplets")); EditorGUILayout.Slider(solubility, 0.001f, 1.0f, new GUIContent("Solubility")); EditorGUILayout.IntSlider(springsPerRiver, 0, 20, new GUIContent("Springs Per River")); EditorGUILayout.IntSlider(erosionSmoothAmount, 0, 10, new GUIContent("Smooth Amount")); if (GUILayout.Button("Erode")) { terrain.Erode(); } } showClouds = EditorGUILayout.Foldout(showClouds, "Clouds"); if (showClouds) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); EditorGUILayout.PropertyField(numClouds, new GUIContent("Number of Clouds")); EditorGUILayout.PropertyField(particlesPerCloud, new GUIContent("Particles Per Cloud")); EditorGUILayout.PropertyField(cloudStartSize, new GUIContent("Cloud Start Size")); EditorGUILayout.PropertyField(cloudScaleMin, new GUIContent("Scale Min")); EditorGUILayout.PropertyField(cloudScaleMax, new GUIContent("Scale Max")); EditorGUILayout.PropertyField(cloudMaterial, new GUIContent("Cloud Material")); EditorGUILayout.PropertyField(cloudShadowMaterial, new GUIContent("Cloud Shadow Material")); EditorGUILayout.PropertyField(cloudColour, new GUIContent("Colour")); EditorGUILayout.PropertyField(cloudLining, new GUIContent("Lining")); EditorGUILayout.PropertyField(cloudMinSpeed, new GUIContent("Min Speed")); EditorGUILayout.PropertyField(cloudMaxSpeed, new GUIContent("Max Speed")); EditorGUILayout.PropertyField(cloudRange, new GUIContent("Distance Travelled")); if (GUILayout.Button("Generate Clouds")) { terrain.GenerateClouds(); } } showSmooth = EditorGUILayout.Foldout(showSmooth, "Smooth Terrain"); if (showSmooth) { EditorGUILayout.IntSlider(peakCount, 1, 10, new GUIContent("Smooth Aamount")); if (GUILayout.Button("Smooth")) { terrain.Smooth(); } } showHeightMap = EditorGUILayout.Foldout(showHeightMap, "Height Map"); if (showHeightMap) { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); int hmtSize = (int)(EditorGUIUtility.currentViewWidth - 100); GUILayout.Label(hmTexture, GUILayout.Width(hmtSize), GUILayout.Height(hmtSize)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Refresh", GUILayout.Width(hmtSize))) { float[,] heightMap = terrain.terrainData.GetHeights(0, 0, terrain.terrainData.heightmapWidth, terrain.terrainData.heightmapHeight); for (int y = 0; y < terrain.terrainData.heightmapHeight; y++) { for (int x = 0; x < terrain.terrainData.heightmapWidth; x++) { hmTexture.SetPixel(x, y, new Color(heightMap[x, y], heightMap[x, y], heightMap[x, y], 1)); } } hmTexture.Apply(); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (GUILayout.Button("Reset Terrain")) { terrain.ResetTerrain(); } serializedObject.ApplyModifiedProperties(); }
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; }