Unity C#:如何将三维Node数组转为一维数组以支持编辑时保存?
三维网格坐标转一维数组索引方案
核心转换公式
对于尺寸为width(x轴节点数)、height(y轴节点数)、depth(z轴节点数)的三维网格,任意节点的坐标(x, y, z)(0-based索引)可通过以下公式转换为一维数组的索引:
index = x + y * width + z * width * height
参数说明
x:节点在x轴的位置(取值范围:0 ≤ x < width)y:节点在y轴的位置(取值范围:0 ≤ y < height)z:节点在z轴的位置(取值范围:0 ≤ z < depth)width * height:单个z层包含的节点总数,用于快速定位z轴对应的起始索引
反向转换(索引转坐标)
如果需要从一维数组索引还原回三维坐标,可使用以下计算:
x = index % width y = (index / width) % height z = index / (width * height)
代码示例(C#)
// 定义网格尺寸 int gridWidth = 10; // x轴节点数 int gridHeight = 8; // y轴节点数 int gridDepth = 5; // z轴节点数 // 三维坐标转一维索引 int targetX = 3; int targetY = 2; int targetZ = 1; int arrayIndex = targetX + targetY * gridWidth + targetZ * gridWidth * gridHeight; // 一维索引转三维坐标 int restoredX = arrayIndex % gridWidth; int restoredY = (arrayIndex / gridWidth) % gridHeight; int restoredZ = arrayIndex / (gridWidth * gridHeight);
注意事项
- 必须使用0-based坐标,如果你的网格坐标是从1开始的,需要先对x、y、z分别减1再计算索引
- 一维数组的长度必须等于
width * height * depth,避免数组越界
内容的提问来源于stack exchange,提问作者Justin Davis
相关产品推荐
相关产品推荐

