提问人:nthh 提问时间:7/2/2023 最后编辑:nthh 更新时间:7/3/2023 访问量:57
如何用立方体创建自定义形状?(使用 3D 数组)
How to create a custom shape out of cubes? (using a 3d array)
问:
所以我想创建一个具有较小立方体的立方体,但它看起来更像一个球体。就像由立方体组成的游戏一样,比如 Minecraft。我想出了这样的形状。“球形立方体”
在此之前,我只创建了一个普通的立方体,有 3 个“for”循环,逐行。(它只是一个带有“1”和“0”值的普通 3D int 数组)因此,如果我以同样的方式做我的“球体”,就会有很多元素需要跳过,而且由于立方体是 13x13,它的 169 行......这么多代码 - 看起来一团糟。有什么不同的方法可以做到这一点吗?
答:
1赞
nthh
7/3/2023
#1
我成功了!这是我的代码...我仍然不明白一些事情...... 当我改变一切时,一切都开始工作了 ||运算符到 |
请告诉我是否可以使此代码更好。我是Unity和编程的新手,所以每一点信息都受到高度赞赏!
private void DestroyBlockBrush6(Vector3Int blockPos)
{
int brushSize = 13;
bool killBlock = false;
int indent = -1;
int currBlockX = blockPos.x - brushSize / 2;
int currBlockY = blockPos.y - brushSize / 2;
int currBlockZ = blockPos.z - brushSize / 2;
for (int z = 0; z < brushSize; z++, currBlockZ++)
{
for (int y = 0; y < brushSize; y++, currBlockY++)
{
indent = SetIndent(y, z);
for (int x = 0; x < brushSize; x++, currBlockX++)
{
if (indent >= 0)
{
if ((x >= indent) && (x < brushSize - indent))
{
killBlock = true;
}
else
{
killBlock = false;
}
}
if ((currBlockX >= 0 && currBlockX < ChunkWidth) &&
(currBlockY >= 0 && currBlockY < ChunkHeight) &&
(currBlockZ >= 0 && currBlockZ < ChunkLength) && killBlock)
{
Blocks[currBlockX, currBlockY, currBlockZ] = 0;
}
}
currBlockX -= brushSize;
}
currBlockY -= brushSize;
}
//Blocks[7, 0, 0] = 1;
// IDONT KNOW WHAT CAN I DO ABOUT THIS BUG :)
static int SetIndent(int y, int z)
{
if ((z == 0 | z == 12) && (y > 2 && y < 10)) return 3;
if ((z == 1 | z == 11) && (y == 2 | y == 10)) return 3;
if ((z == 1 | z == 11) && (y > 2 && y < 10)) return 2;
if ((z == 2 | z == 10) && (y == 1 | y == 11)) return 3;
if ((z == 2 | z == 10) && (y == 2 | y == 10)) return 2;
if ((z == 2 | z == 10) && (y > 2 && y < 10)) return 1;
if ((z >= 3 && z <= 9) && (y == 0 | y == 12)) return 3;
if ((z >= 3 && z <= 9) && (y == 2 | y == 10)) return 1;
if ((z >= 3 && z <= 9) && (y == 1 | y == 11)) return 2;
if ((z >= 3 && z <= 9) && (y > 2 && y < 10)) return 0;
return -1;
}
**strong text**
RegenerateMesh();
}
评论