【问题标题】:Is there a way to reference the axis of a vector with an integer rather than x or y?有没有办法用整数而不是 x 或 y 来引用向量的轴?
【发布时间】:2022-01-22 12:47:08
【问题描述】:

我有这个代码 sn-p 并且希望使它更干净(这是统一的 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);
}

【问题讨论】:

  • entryInfo 是什么类型? Unity 的Vector4 类型?

标签: c# unity3d vector


【解决方案1】:

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

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

话虽如此,从浮点字段中提取整数有点笨拙,如果您真的不存储浮点数,您可以考虑实现自己的 Vector4Int 类型,该类型以整数为后盾并支持索引运算符。

【讨论】:

  • 太棒了!像魅力一样工作!
【解决方案2】:

您可以查看Access property by Index,它可以帮助您使用 for 循环索引访问 roomData .entryInfo

但我认为降低“cleaner”的代码可读性并不是一个好主意

【讨论】:

  • 反射很慢,当 Vector4 已经提供此功能时,这是不必要的。
【解决方案3】:

据我所知,您不能像使用数组那样传入变量来访问向量的特定组件。您的问题的一种可能解决方案可能是在 wallObjs 类中有一个方法,该方法完全可以完成您正在做的事情,但更隐蔽,但这取决于您需要做多少。如果您只这样做一次,那么不幸的是,您可能只需要忍受它并处理丑陋的代码。

【讨论】:

  • 如果此向量实现支持索引器 - Unity 向量支持索引器 - 你可以...
  • @derHugo 我不知道你能做到这一点!有相关文件吗?我查了一下,但没有找到任何东西,只有 JavaScript 的旧文档。
猜你喜欢
  • 1970-01-01
  • 2020-08-10
  • 2020-10-18
  • 2019-11-23
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 2021-12-06
  • 2020-08-11
相关资源
最近更新 更多