我在Unity中创建了一个2D虚拟桌面游戏,其中包含以下设置:
这是手动放入gameObjects,当你需要创建多个机制时非常不方便。
现在我需要创建2个机制:
注意:大的白色方块是角落,不会被用于任何机械师。
我目前的心态是制作一个瓷砖网格,然后是一个3x3网格。
我已经尝试过从gameObject或IEnumerator创建网格,这导致了不成功的尝试,或者我PC的极端性能问题。
答案 0 :(得分:1)
这是我的想法。
sub-grid
):
(*)当旋转3x3网格时,每个图块的索引不再有效。因为3x3网格是旋转的而不是它的图块。所以你需要翻译3x3网格中的索引以匹配子网格索引。最好不要改变实际指数,而是在使用前转换它们。并且记得在完成后撤消旋转。
我建议这种方法来翻译索引:
struct XY {
public int x;
public int y;
public XY(int X, int Y){x=X;y=Y;}
}
//no need for this one, it's just here to have a better understanding
static XY[,] _rotateNoneIdx = new XY {
{ new XY(0,0), new XY(1,0), new XY(2,0) },
{ new XY(0,1), new XY(1,1), new XY(2,1) },
{ new XY(0,2), new XY(1,2), new XY(2,2) }
};
//translating matrix for translating left-rotated 3x3 grid tiles
static XY[,] _rotateLeftIdx = new XY {
{ new XY(2,0), new XY(2,1), new XY(2,2) },
{ new XY(1,0), new XY(1,1), new XY(1,2) },
{ new XY(0,0), new XY(0,1), new XY(0,2) }
};
//translating matrix for translating right-rotated 3x3 grid tiles
static XY[,] _rotateRightIdx = new XY {
{ new XY(0,2), new XY(0,1), new XY(0,0) },
{ new XY(1,2), new XY(1,1), new XY(1,0) },
{ new XY(2,2), new XY(2,1), new XY(2,0) }
};
//this method translates the rotated tile indices to actual indices
static XY TranslateIndex(XY beforeRotateXY, bool isRotateLeft)
{
if(isRotateLeft) return _rotateLeftIdx[beforeRotateXY.x, beforeRotateXY.y];
return _rotateRightIdx[beforeRotateXY.x, beforeRotateXY.y];
}
我还没有测试过此代码,因此您可能需要尝试左右交换。