void GenerateSurfaceChunk(Vector3 chunkPos) { Transform newChunk = Instantiate(chunkPrefab, chunkPos, Quaternion.identity, gameObject.transform); newChunk.name = "Chunk " + chunkPos.ToString(); OldChunk currentChunk = newChunk.GetComponent <OldChunk>(); float[,,] blockList = new float[chunkSize, chunkSize, chunkSize]; for (int i = (int)chunkPos.x; i < (int)(chunkPos.x) + chunkSize; i++) { for (int j = (int)chunkPos.y; j < (int)(chunkPos.y) + chunkSize; j++) { for (int k = (int)chunkPos.z; k < (int)(chunkPos.z) + chunkSize; k++) { float height = 0; for (int l = 1; l <= 32; l *= 2) { height += Mathf.PerlinNoise(seed + ((float)i / (frequency / l)), seed + ((float)k / (frequency / l))) * (amplitude / l); } if (Math.Ceiling(height) == j) { blockList[i - (int)chunkPos.x, j - (int)chunkPos.y, k - (int)chunkPos.z] = 1; } else { blockList[i - (int)chunkPos.x, j - (int)chunkPos.y, k - (int)chunkPos.z] = 0; } } } } currentChunk.SetFields(chunkPos, chunkSize, blockList); currentChunk.MakeMesh(); generatedChunks.Add(chunkPos); }
void GenerateChunk(Vector3 chunkPos) { Transform newChunk = Instantiate(chunkPrefab, chunkPos, Quaternion.identity, gameObject.transform); newChunk.name = "Chunk " + chunkPos.ToString(); OldChunk currentChunk = newChunk.GetComponent <OldChunk>(); float[,,] blockList = new float[chunkSize, chunkSize, chunkSize]; for (int i = (int)chunkPos.x; i < (int)(chunkPos.x) + chunkSize; i++) { for (int j = (int)chunkPos.y; j < (int)(chunkPos.y) + chunkSize; j++) { for (int k = (int)chunkPos.z; k < (int)(chunkPos.z) + chunkSize; k++) { blockList[i - (int)chunkPos.x, j - (int)chunkPos.y, k - (int)chunkPos.z] = perlin3D(i, j, k, 8, 2, frequency, seed); } } } blockList = LimitHeight(blockList); currentChunk.SetFields(chunkPos, chunkSize, blockList); currentChunk.MakeMesh(); generatedChunks.Add(chunkPos); }