有没有一种方法可以用整数而不是x或y来引用向量的轴



我有这个代码片段,希望它更干净(这是统一btw的c#(:

WallObj[] wallObjs = new WallObj[4];
for (int i = 0; i < 4; i++)
{
wallObjs[i] = transform.GetChild(i + 1).GetComponent<WallObj>();
}

wallObjs[0].setWallState((int)roomData.entryInfo.x);
wallObjs[1].setWallState((int)roomData.entryInfo.y);
wallObjs[2].setWallState((int)roomData.entryInfo.z);
wallObjs[3].setWallState((int)roomData.entryInfo.w);
foreach (WallObj wall in wallObjs)
{
wall.adjacents(roomData.dunGrid, roomData.abstRoom);
}

最好,我希望它看起来像:

WallObj[] wallObjs = new WallObj[4];
WallObj[] wallObjs = new WallObj[4];
for (int i = 0; i < 4; i++)
{
wallObjs[i] = transform.GetChild(i + 1).GetComponent<WallObj>();
wallObjs[i].setWallState((int)roomData.entryInfo.i);
}
foreach (WallObj wall in wallObjs)
{
wall.adjacents(roomData.dunGrid, roomData.abstRoom);
}

Unity的Vector4完全支持您所描述的索引运算符。

只需使用(int)roomData.entryInfo[i]

也就是说,从浮点字段中提取int有点麻烦,如果你真的不存储浮点,你可以考虑实现你自己的Vector4Int类型,它有整数支持,并支持索引运算符。

您可以按索引检查Access属性,它可以帮助您使用for循环索引访问roomData.entryInfo

但我认为让代码的可读性降低并不是一个好主意清洁剂";

据我所知,您不能像使用数组那样传入变量来访问向量的特定组件。问题的一个可能解决方案可能是在wallObjs类中使用一个方法,该方法完全执行您正在执行的操作,但有点隐藏,但这取决于您需要执行的操作量。不幸的是,如果你只做过一次,你可能只需要接受它并处理丑陋的代码。

最新更新