我正在用统一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个小时里,我一直在打开和关闭该代码,但找不到任何东西。我也觉得我在for循环中从tileHeight
读取的方式可能有问题。任何帮助表示赞赏!