Newer
Older
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;
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();
}