public override void OnInspectorGUI() { //updating values serializedObject.Update(); //target is the linked script CustomTerrain customTerrain = (CustomTerrain)target; Event e = Event.current; switch (e.type) { case EventType.KeyDown: { if (e.keyCode == (KeyCode.Alpha6)) { customTerrain.SaveTerrain(); } if (e.keyCode == (KeyCode.Alpha7)) { customTerrain.RandomTerrain(); } if (e.keyCode == (KeyCode.Alpha8)) { customTerrain.PerlinNoise(); } if (e.keyCode == (KeyCode.Alpha3)) { customTerrain.MultiplePerlinNoise(); } if (e.keyCode == (KeyCode.Alpha4)) { customTerrain.AddPerlinNoise(); } if (e.keyCode == (KeyCode.Alpha5)) { customTerrain.RemovePerlinNoise(); } if (e.keyCode == (KeyCode.Alpha1)) { customTerrain.ResetTerrain(); } if (e.keyCode == (KeyCode.Alpha0)) { customTerrain.LoadTerrain(); } break; } } EditorGUILayout.PropertyField(resetTerrain); //fold out button and fields randomHeight = EditorGUILayout.Foldout(randomHeight, "RandomHeight"); if (randomHeight) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Set a random height within range", EditorStyles.boldLabel); EditorGUILayout.PropertyField(randomHeightRange); if (GUILayout.Button(new GUIContent("Random Height", "Random Height Terrain Generation"))) { customTerrain.RandomTerrain(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); perlinNoise = EditorGUILayout.Foldout(perlinNoise, "PerlinNoise"); if (perlinNoise) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Perlin Noise", EditorStyles.boldLabel); EditorGUILayout.Slider(perlinX, 0, 0.1f, new GUIContent("X")); //min 0 max 0.1 although still EditorGUILayout.Slider(perlinY, 0, 0.1f, new GUIContent("Y")); //gets too "spiky" EditorGUILayout.IntSlider(perlinXoffset, 0, 10000, new GUIContent("X Offset")); EditorGUILayout.IntSlider(perlinYoffset, 0, 10000, new GUIContent("Y Offset")); EditorGUILayout.IntSlider(perlinOctaves, 1, 10, new GUIContent("Octaves")); EditorGUILayout.Slider(perlinPersistance, 0.1f, 10f, new GUIContent("Persistance")); EditorGUILayout.Slider(perlinHeightScale, 0f, 1f, new GUIContent("Height Scale")); if (GUILayout.Button(new GUIContent("Perlin Noise", "Simle Perlin Noise generation"))) { customTerrain.PerlinNoise(); } } multiplePerlinNoise = EditorGUILayout.Foldout(multiplePerlinNoise, "Multiple Perlin Noise"); if (multiplePerlinNoise) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.Label("Multiple Perlin Noise", EditorStyles.boldLabel); perlinParametersTable = GUITableLayout.DrawTable(perlinParametersTable, perlinParameters); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button(new GUIContent("+", "Adding an extra Perlin Curve"))) { customTerrain.AddPerlinNoise(); } if (GUILayout.Button(new GUIContent("-", "Removing the selected Perlin Curve"))) { customTerrain.RemovePerlinNoise(); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button(new GUIContent("Apply Multiple Perlin", "Applying Multiple Perlin Noise Curves"))) { customTerrain.MultiplePerlinNoise(); } } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (GUILayout.Button(new GUIContent("Reset Terrain", "will completely reset terrain"))) { customTerrain.ResetTerrain(); } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (GUILayout.Button(new GUIContent("Save Terrain", "Saving Terrain in Assets/Saves"))) { customTerrain.SaveTerrain(); } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (GUILayout.Button(new GUIContent("Load Terrain", "Loading Terrain from Assets/Saves"))) { customTerrain.LoadTerrain(); } EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); if (GUILayout.Button(new GUIContent("Help Window", "Will open Help Window"))) { HelpWindow.ShowHelpWindow(); } //applying modifications serializedObject.ApplyModifiedProperties(); }