Итак, я пытаюсь понять развитие единства с помощью c #, и для своей первой задачи я решил сделать клон Minecraft, чтобы лучше понимать вершины и сетки.Я успешно создал систему чанков, и она отлично работает, но моя проблема со случайной гладкой местностью.
Мое решение состояло в том, чтобы создать таблицу шума perlin размером с весь мир, тогда я получу конкретные части таблицы шума, которые будут помещены в каждый кусок.Я пробовал это, но я получаю ошибку
IndexOutOfRangeException: Array index is out of range
, когда я пытаюсь получить доступ к таблице, чтобы получить высоты в генераторе чанка.
Вот два сценария, о которых идет речь:
Сценарий 1: Менеджер ландшафта
Этот сценарий должен генерировать чанки рядом друг с другом ион делает это довольно хорошо.
void Start () {
chunks = new Chunk[renderArea * renderArea];
worldHeightmap = PerlinNoise.GenerateHightmap(chunkSize * worldSize + 1, chunkHeight * worldSize + 1, worldSeed, worldSeedIntensity);
print(worldHeightmap.Length);
RVector3 chunkDimensions = new RVector3(chunkSize, chunkHeight, chunkSize);
for(int x = 1; x < renderArea + 1; x++) {
for(int z = 1; z < renderArea + 1; z++) {
Vector3 spawnPos = new Vector3(x * chunkSize, 0, z * chunkSize);
// Ignore this float [,] heightMapPeice = new float[x * chunkSize, z * chunkSize];
// Creates Chunk //
GameObject chunkHolder = Instantiate(block, block.transform.position, Quaternion.identity);
chunk = chunkHolder.GetComponent<Chunk>();
chunk.GenerateChunk(chunkDimensions, spawnPos, worldHeightmap, new Vector2(x, z));
chunks[chunkIndex] = chunk;
chunkIndex++;
}
}
print(chunks.Length + " Chunks Generated");
}
Сценарий 2: Генератор чанков
public void GenerateChunk (RVector3 chunkDimensions, Vector3 spawnPosition, float[,] chunkHeights, Vector2 heightIndex) {
chunkSize = chunkDimensions;
chunkBlocks = new Block[chunkSize.x + 1, chunkSize.y + 1, chunkSize.z + 1];
transform.position = spawnPosition;
for(int x = 0; x <= chunkSize.x; x++) {
for(int y = 0; y <= chunkSize.y; y++) {
for(int z = 0; z <= chunkSize.z; z++) {
chunkBlocks[x,y,z] = new Block(true);
//print(x * (int) heightIndex.x);
if(y < chunkHeights[x * chunkSize, z * chunkSize]) {
chunkBlocks[x,y,z] = new Block(false);
}
}
}
}
updateChunk();
}
Если бы я мог получить некоторую помощь по этому вопросу, это было бы очень полезно.Большое спасибо <3. </p>