using UnityEditor.PackageManager.UI; using UnityEngine; public class TerrainGenerator : MonoBehaviour { public int height = 5; public int length = 1000; public int width = 1000; public int heightmapResolution = 1025; public float hillsRate = 0.5f; public float slope = 0.5f; public TerrainLayer[] terrainLayers; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { } private void OnEnable() { var terrain = GetComponent(); var terrainCollider = terrain.GetComponent(); var terrainData = new TerrainData() { size = new Vector3(length, height, width), heightmapResolution = heightmapResolution }; var map = new float[terrainData.heightmapResolution, terrainData.heightmapResolution]; for (int i = 0; i < terrainData.heightmapResolution; i++) { for (int j = 0; j < terrainData.heightmapResolution; j++) { var prevHeight = j == 0 ? i == 0 ? Random.Range(-slope, slope) : map[i - 1, 0] : map[i, j - 1]; var isSlope = Random.value <= hillsRate; if (isSlope) { map[i, j] = Random.Range(-slope, slope); // prevHeight * (1 + Random.Range(-slope, slope)); } else { map[i, j] = 0; } } } terrainData.SetHeights(0, 0, map); terrain.terrainData = terrainData; terrainCollider.terrainData = terrainData; terrainData.terrainLayers = terrainLayers; Debug.Log(terrain.terrainData.size); } // Update is called once per frame void Update() { } }