【问题标题】:How to validate multiple inputs in in Unity. Inputs are in a list of CUSTOM CLASS如何在 Unity 中验证多个输入。输入在 CUSTOM CLASS 列表中
【发布时间】:2022-11-04 00:19:44
【问题描述】:

在刀锋山:战团快速战斗模式中,允许用户选择军队组成,如图所示:

当用户滑动其中一个滑块时,其他滑块会自动移动到一个合理的值。

我想做类似的事情,但在 Unity Inspector 中。我有一个包含 GameObject 和字节滑块的类(使用范围属性):

我怎样才能达到类似的结果,因为每个人的产卵机会网格项?

生成机会byte.

我使用了OnValidate 函数。我获得的产卵机会如下:

// the sum of all spawn chances should be 100
List<byte> spawnChances = new List<byte>();
foreach (Spawnable item in gridItems) {
    spawnChances.Add(item.spawnChance);
}
if (spawnChances.Count > 0) {
    byte sum = 0;
    foreach (byte chance in spawnChances) {
        sum += chance;
    }
    if (sum != 100) {
        foreach (Spawnable item in gridItems) {
            item.spawnChance = (byte)(item.spawnChance / sum * 100);
            // if i do this, when i change the value
            // the editor snaps it to 100
        }
    }
}

【问题讨论】:

  • 你知道OnValidate 仅限编辑吗?
  • 是的,如果有更好的方法请告诉我。

标签: c# unity3d unity-editor


【解决方案1】:

您期望的值介于 0 和 1 之间,在此处乘以 100:

item.spawnChance = (byte)(item.spawnChance / sum * 100);

但它会捕捉到 0 或 100。那是因为 item.spawnChance / sum 将是 0 或 1。

spawnChance 是一个字节(整数,如 int),除法不会产生像 0.34 这样的小数。您需要一个浮点数来执行此操作。

简单的修复,在除以总和之前将 spawnChance 转换为浮动:

item.spawnChance = (byte)((float)item.spawnChance / sum * 100);

【讨论】:

  • 我测试了它。它起作用了,但是当两个值变为零时,它又开始捕捉了。我认为这是因为所有“spawnChance”的总和应该是 100。
  • 确保不是所有的值都是 0,因为那样 sum 将是 0,你会得到 cannot divide by 0 错误。
猜你喜欢
  • 2021-06-08
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 2021-09-08
相关资源
最近更新 更多