Exemplo n.º 1
0
    public override void OnInspectorGUI()
    {
        // Update all the serialized values of CustomTerrain.cs
        serializedObject.Update();

        // Link to the script CustomTerrain.cs
        CustomTerrain terrain = (CustomTerrain)base.target;

        EditorGUILayout.PropertyField(resetValues);
        EditorGUILayout.Space();

        // [Random Terrain] button
        showRandom = EditorGUILayout.BeginFoldoutHeaderGroup(showRandom, "Random Terrain");
        if (showRandom)
        {
            EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);
            GUILayout.Label("Generate Random Width and Height Values", EditorStyles.boldLabel);
            EditorGUILayout.Space();
            EditorGUILayout.PropertyField(randomHeight, new GUIContent("Random Values (X,Y)"));
            EditorGUILayout.Space();
            if (GUILayout.Button("Generate Terrain"))
            {
                terrain.RandomTerrain();
            }
        }

        EditorGUILayout.EndFoldoutHeaderGroup();
        EditorGUILayout.Space();

        // [Midpoint Displacement] button
        showMidPoint = EditorGUILayout.BeginFoldoutHeaderGroup(showMidPoint, "Midpoint Displacement");
        if (showMidPoint)
        {
            EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);
            GUILayout.Label("Settings", EditorStyles.boldLabel);
            EditorGUILayout.Space();
            EditorGUILayout.Slider(midHeightMin, -10, 10, new GUIContent("Min. Height"));
            EditorGUILayout.Space();
            EditorGUILayout.Slider(midHeightMax, 0, 10, new GUIContent("Max. Height"));
            EditorGUILayout.Space();
            EditorGUILayout.Slider(midRoughness, 0, 10, new GUIContent("Roughness"));
            EditorGUILayout.Space();
            EditorGUILayout.Slider(midHeightDampenerPower, 0, 10, new GUIContent("Height Dampener Power"));
            EditorGUILayout.Space();
            if (GUILayout.Button("Generate terrain"))
            {
                terrain.MidPoint();
            }
        }

        EditorGUILayout.EndFoldoutHeaderGroup();
        EditorGUILayout.Space();

        // [Generate & Save Height map] Button]
        showHeighMap = EditorGUILayout.BeginFoldoutHeaderGroup(showHeighMap, "Generate & Save Texture");
        if (showHeighMap)
        {
            EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);
            GUILayout.Label("Generate & Save grayscale Height Map Texture (.png)", EditorStyles.boldLabel);
            EditorGUILayout.Space(10);
            filename = EditorGUILayout.TextField("Filename", filename, GUILayout.Width(340));

            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            int heighMapSize = (int)(EditorGUIUtility.currentViewWidth - 100);
            GUILayout.Label(heightMapTexture, GUILayout.Width(heighMapSize), GUILayout.Height(heighMapSize));
            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            if (GUILayout.Button("Generate Texture", GUILayout.Width(150)))
            {
                float[,] heightMap = terrain.terrainData.GetHeights(0, 0, terrain.terrainData.heightmapResolution,
                                                                    terrain.terrainData.heightmapResolution);
                for (int y = 0; y < terrain.terrainData.heightmapResolution; y++)
                {
                    for (int x = 0; x < terrain.terrainData.heightmapResolution; x++)
                    {
                        heightMapTexture.SetPixel(x, y, new Color(heightMap[x, y], heightMap[x, y], heightMap[x, y], 1));
                    }
                }
                heightMapTexture.Apply();
            }
            if (GUILayout.Button("Save Texture", GUILayout.Width(150)))
            {
                byte[] bytes = heightMapTexture.EncodeToPNG();
                Directory.CreateDirectory(Application.dataPath + "/Maps");
                File.WriteAllBytes(Application.dataPath + "/Maps/" + filename + ".png", bytes);
            }
            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();
            EditorGUILayout.Space();
        }
        EditorGUILayout.EndFoldoutHeaderGroup();
        EditorGUILayout.Space();

        // [Load Height Map] button
        showLoadMap = EditorGUILayout.BeginFoldoutHeaderGroup(showLoadMap, "Load Texture");
        if (showLoadMap)
        {
            EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);
            GUILayout.Label("Load grayscale Height Map Texture (.png)", EditorStyles.boldLabel);
            EditorGUILayout.Space();
            EditorGUILayout.PropertyField(loadMapImage, new GUIContent("Import Height Map"));
            EditorGUILayout.Space(10);
            GUILayout.Label("Default Scale (512 X 512)", EditorStyles.boldLabel);
            EditorGUILayout.Space();
            EditorGUILayout.PropertyField(heightMapScale);
            EditorGUILayout.Space();
            if (GUILayout.Button("Load Texture"))
            {
                terrain.LoadMap();
            }
        }
        EditorGUILayout.EndFoldoutHeaderGroup();
        EditorGUILayout.Space();

        // [Reset Terrain] button
        EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);
        EditorGUILayout.Space();
        if (GUILayout.Button("Reset Terrain"))
        {
            terrain.ResetTerrain();
        }

        EditorGUILayout.Space();
        // Apply changes inside serialized.Update();
        serializedObject.ApplyModifiedProperties();
    }