using System.Collections; using System.Collections.Generic; using UnityEngine; [System.Serializable] public struct Octave { public float amplitude; public float frequency; } [System.Serializable] public enum NoiseType { Perlin, Simplex, Celluar } public class TerrainGenerator : MonoBehaviour { public Terrain terrain; public NoiseType type; public List<Octave> octaves; public bool refresh; [Tooltip("How fine grain the generated terrain will be. Larger values = more precise.")] public int xSamples = 1000, ySamples = 1000; private void Start() { float[,] heights = new float[xSamples, ySamples]; //float xRes = (terrain.terrainData.size.x / xSamples); //float yRes = (terrain.terrainData.size.y / ySamples); Vector2 startPerlinPos = RNG.GetRandomVector2(-xSamples, -ySamples, xSamples, ySamples); foreach (var octave in octaves) { for (int x = 0; x < xSamples; x++) { for (int y = 0; y < ySamples; y++) { heights[x, y] += Mathf.PerlinNoise(x * octave.frequency + startPerlinPos.x, y * octave.frequency + startPerlinPos.y) * octave.amplitude; } } } terrain.terrainData.SetHeights(0, 0, heights); } private void Update() { if (refresh) { refresh = false; Start(); } } }