# Cube terrain with perlin noise

hi, iv made a script (JS) that generate a 20x20 terrain of cubes, with random hills using perlin noise.

but i have a few problems to solve and questions to ask:

when i generate the terrain again it gives me the exact same terrain, how would i make it automatically give me something else?

how would i make this infinite? how would i make it so when the player goes forward into the world the world would keep up with him? but still look normal (can i make something with chunks?)

how can i implement a seed system ware when you enter a seed you will get the same terrain every time?

sorry if it’s a lot of questions…

the script:
var size:Vector2 = new Vector2(20, 20);
var height:float = 10.0f;
var noiseStrength:float = 10.0f;

``````private var perlinNoise;

private var root:GameObject;

function OnGUI(){
if(GUI.Button (Rect(10, 10, 100, 30), "Generate")){
Generate();
}
}

function PerlinNoise(x:float, y:float){
var noise:float = Mathf.PerlinNoise(x / noiseStrength, y/ noiseStrength);
return noise * height;
}

function Generate(){
Destroy(GameObject.Find("Terrain"));

root = new GameObject("Terrain");
root.transform.position = new Vector3(size.x/2, 0, size.y/2);

for(var i:int = 0; i <= size.x; i++){
for(var p:int = 0; p <= size.y; p++){
var box:GameObject = GameObject.CreatePrimitive(PrimitiveType.Cube);
box.transform.position = new Vector3( i, PerlinNoise( i, p ), p);
box.transform.parent = root.transform;
}
}

root.transform.position = Vector3.zero;
print(PerlinNoise);
}
``````

For the result being the same all the time, add a seed to the x and y
Like this:
var noise:float = Mathf.PerlinNoise((Seed + x) / noiseStrength, (Seed + y) / noiseStrength);

To save the seed try

``````var Seed = 0;

function Start() {
Seed = PlayerPrefs.GetInt("Seed");
}
}

function OnGUI() {
Seed = GUI.TextField(Rect(0, 50, 100,30), Seed.ToString());
if (GUI.Button(Rect(0,0,100,30), "Save seed") {
PlayerPrefs.SetInt("Seed", Seed);
PlayerPrefs.Save();
}
}
``````