How to have graphic continuity in my chuncks ?(2d procedural / sprites)

I’m trying to learn how to procedurally create a world in 2d. After some research i did this :

I create a DataWorld.cs a DataChunk.cs and a DataSprite.cs to store all the data and separate Data from graphic creation.
And i create an other script WorldGenerator.cs to actually create the world.

it looks like this :

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class WorldGenerator : MonoBehaviour {

	public Sprite[] sprites;
	public SpriteRenderer sp;
	public int chunk_size_x;
	public int chunk_size_y;
	public int world_size_x;
	public int world_size_y;	

	int _chunkNum = -1;
	int _scale;
	int _magnitude;
	float _power = 1;
	int _treshold = 15;
	GameObject _chunkGO;

	SpriteRenderer spriteClone;

	void Start () 
		sprites = Resources.LoadAll<Sprite>("spriteTest");
		_scale = (int)Random.Range(10f,50f);
		_magnitude =(int) Random.Range((float)_scale-10, _scale+20);

		MakeWorld(world_size_x, world_size_y, chunk_size_x, chunk_size_y);

	public void MakeWorld(int world_size_x, int world_size_y, int chunk_size_x, int chunk_size_y)
		DataWorld world = new DataWorld(world_size_x, world_size_y, chunk_size_x, chunk_size_y);

		for(int x = 0; x < world_size_x; x++)
			for(int y = 0; y < world_size_y; y++)
				MakeChunk(world, chunk_size_x,chunk_size_y);
				_chunkGO.transform.position = new Vector3 (world.chunks[x,y].posX, world.chunks[x,y].posY,0) ;	


	public void MakeChunk(DataWorld world, int chunk_size_x, int chunk_size_y)
		GameObject chunkGO = new GameObject(); = "CHUNK" + " " + _chunkNum;
		_chunkGO = chunkGO;

 		for(int x=0; x< chunk_size_x; x++)
			for(int y = 0; y< chunk_size_y; y++)


					spriteClone = (SpriteRenderer)Instantiate(sp, new Vector2(x,y), Quaternion.identity);
					spriteClone.transform.parent = chunkGO.transform; = "sprite " +x + " , " +y;
					world.GetAllChunks().spriteTile[x,y].spr = spriteClone;
					world.GetAllChunks().spriteTile[x,y].type = DataSprite.TYPE.BLACK;



		for(int x=0; x< chunk_size_x; x++)
			for(int y = 0; y< chunk_size_y; y++)


int PerlinNoise(int x,int y, float scale, float mag, float power){
	float rValue;
	rValue=Noise.Noise.GetNoise (((double)x) / scale, ((double)y)/ scale,0);
		rValue=Mathf.Pow( rValue, power);
	return (int) rValue;

But the way i do it all instantiates chunks are the same.
I understand why there are all the same, but i can’t figure out how to make them continue each other base on the PerlinNoise function.


So i fixed the continuity on the axis X by adding


It works fine when i only have one dimension in my world ( i only add chunk along the X axis).
But when i have 2 dimension let say my world size is

  • world_size_x =4
  • world_size_y =2

I can’t figure out how to add chunk.posY to sample the noise corectly.


does not work. I did plenty of other test but none of them worked. Where and how do i have to add the chunk.posY ?


nevermind after several hour of break i finally had the right brain wave :


The Problem is, your chunks don’t know where they are globally… you only feed them local x/y from 0 to chunk_size_x/y-1 … the need to know their position and then add this position to the local one when they sample the noise field.

Also, you don’t seem to use DataChunk at all - your worldgen is doing all the work.