Я делаю игру в Unity 3D, которая начинается с создания карты мира. Каждой плитке присваивается значение высоты для определения ландшафта, но когда я пытаюсь прочитать значения высоты окружающих плиток, программа зависает.
Я впервые использую многомерные массивы, поэтому я, вероятно, что-то делаю не так. в противном случае я попытался изменить логику и продумать ее, но ничего не нашел.
Я начинаю с заполнения многомерного массива случайными высотами, например:
public int worldWidth;
public int worldHeight;
int[,] tileHeight = new int[4, 4];
//assign height values
for (int j = 0; j < worldWidth; j++)
{
for (int i = 0; i < worldHeight; i++)
{
tileHeight[j, i] = Random.Range(15, 115);
}
}
После этого я создаю плитки, но считаю, что код не имеет значения.
Затем я беру каждую плитку, читаю высоту над, под, слева и справа от нее и вычисляю среднее значение. Затем я сохраняю это число в многомерном массиве в соответствующем месте. Вот мой код:
{
for (int p = 0; p < worldWidth; p++)
{
int NHeight;
int EHeight;
int SHeight;
int WHeight;
//if (o > 0) { NHeight = tileHeight[o--, p]; } else { NHeight = 0; }
//if (p != 3) { EHeight = tileHeight[o, p++]; } else { EHeight = 0; }
//if (o != 3) { SHeight = tileHeight[o++, p]; } else { SHeight = 0; }
//if (p != 0) { WHeight = tileHeight[o, p--]; } else { WHeight = 0; }
plane[o, p] = (NHeight + EHeight + SHeight + WHeight) / 4;
}
}
Чтобы уточнить, что я здесь пытаюсь сделать, приведу пример. Допустим, у меня есть многомерный массив:
{ {3, 5, 2},
{2, 8, 5},
{4, 6, 2} }
мой код в идеале должен начинаться с [0, 0] или 4 и получать числа 2, 6, 0 и 0, а затем усреднять их вместе, получая 2. тогда мой массив будет выглядеть так:
{ {3, 5, 2},
{2, 8, 5},
{2, 6, 2} }
после этого мой код должен перейти к [0, 1] или 6 и получить числа 2, 8, 2 и 0 для ответа 3, чтобы мой массив выглядел следующим образом:
{ {3, 5, 2},
{2, 8, 5},
{2, 3, 2} }
Я бы хотел, чтобы это прошло весь массив.
У меня есть несколько вопросов. Когда я не запускаю четыре закомментированные строки кода и не запускаю Debug.Log();
, все работает. Однако, когда я начинаю запускать код с закомментированными строками, он начинает пропускать строки массива, и если я запускаю все четыре, программа зависает (или занимает так много времени, что я предполагаю, что она зависла). Я предполагаю, что в моей логике есть изъян, но я смотрел на этот код в течение последних 4 часов и не могу ничего найти. Я также чувствую, что может быть что-то не так с тем, как я читаю из tileHeight
в циклах for. Любая помощь приветствуется!