我有这个代码片段,希望它更干净(这是统一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
类中使用一个方法,该方法完全执行您正在执行的操作,但有点隐藏,但这取决于您需要执行的操作量。不幸的是,如果你只做过一次,你可能只需要接受它并处理丑陋的代码。