【发布时间】:2017-07-08 10:30:57
【问题描述】:
由于我们无法序列化多维数组(在 Unity 中),我们仅限于使用一维数组和数学来从 x,y 对转换为索引并返回。以下是当前的转换算法:
int Width = 3; // Number of cells along the x axis
int Height = 3; // Number of cells along the y axis
GameObject[] Cells = new GameObject[ Width * Height ];
public int CalculateIndex( int x, int y )
{
return y * Width + x;
}
public void CalculateXY(int i, out x, out y)
{
x = i % Width;
y = i / Width;
}
现在,我有一个问题,我需要创建一个引入深度和 z 轴的 3 维网格,但我不知道如何将更改注入到上述方法中......我有一个心理障碍。
我发现这篇文章解释了其中的一些内容:
How to "flatten" or "index" 3D-array in 1D array?
但是,我的数组不是 HEIGHT、WIDTH、DEPTH (y,x,z) 顺序,而是 WIDTH、HEIGHT、DEPTH (x,y,z) 顺序。此外,我需要算法将其从索引转换回 x、y、z 值。
谢谢, - 杰夫
【问题讨论】:
-
x + Width * (y + Height * z),x = i % Width; y = (i /= Width) % Height; z = i / Height. -
所以锯齿状数组不是一个选项?
-
也许这个问题对你有帮助:stackoverflow.com/questions/3613429/…。我发现最好通过可视化问题来规避这些心理障碍。
-
在实现中使用模数和除法效率非常低:除法需要多个周期。你在做游戏吗?将(锯齿状)锯齿状数组用于您自己的所有操作,然后将其转换为单个数组进行序列化可能会更有效。