【问题标题】:Unity is returning material color slightly wrongunity正在返回材质颜色略有错误
【发布时间】:2017-11-10 23:53:14
【问题描述】:

我的游戏中有一个小任务,你需要点击奖杯来改变它们上面木头的颜色。我有两个颜色数组,一个是包含所有可能颜色的数组,另一个包含四种颜色(答案)如下:

我已经仔细检查了两个数组之间的颜色是否相等。例如,Colors-array 中的紫色与Right Order-array 中的紫色具有完全相同的 r、g、b 和 a 值。

为了检查奖杯的颜色是否正确,我只需遍历它们并获取它们的材质颜色。然后我对照Right Order-array 检查该颜色,但它不太有效。例如,当我的第一个奖杯是紫色时,它应该是正确的,但这不是因为由于某种原因 Unity 返回的材质颜色与异常颜色略有不同:

希望有人知道为什么会这样。

【问题讨论】:

  • 材料是相同的还是不同的?我的意思是紫色,比如说,在颜色数组和右序数组中。他们分享材料吗?
  • 两个数组都没有材质,只有颜色为“public Color[] colors”
  • 所以你比较奖杯的材质颜色和你的颜色数组。第一个日志属于奖杯的材质颜色,第二个来自数组呢?
  • 是的,没错。

标签: unity3d


【解决方案1】:

当您说它们是完全相同的颜色时,我假设您指的是来自 Color Inspector 的 rgb 值,这些值不是精确值。

现在我不知道不同颜色值可能导致什么,但是 您可以编写一个扩展方法来比较这些值,然后将它们四舍五入到最接近的整数。

public static class Extensions
{
    public static bool CompareRGB(this Color thisColor, Color otherColor)
    {
        return 
            Mathf.RoundToInt(thisColor.r * 255) == Mathf.RoundToInt(otherColor.r * 255) &&
            Mathf.RoundToInt(thisColor.b * 255) == Mathf.RoundToInt(otherColor.b * 255) &&
            Mathf.RoundToInt(thisColor.g * 255) == Mathf.RoundToInt(otherColor.g * 255);
    }
}

用法:

Color red = Color.Red;
red.CompareRGB(Color.Red); // true;
red.CompareRGB(Color.Green); // false;

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我会使用调色板。这只是您使用的所有可能颜色的数组(听起来像您有这个)。将每个“奖杯”的索引记录到这个数组中,同时将颜色分配给渲染器。此外,记录每个“按钮”的索引,同时将颜色分配给渲染器。

    然后您可以简单地比较调色板索引值(简单整数)以查看颜色是否匹配。

    【讨论】:

      猜你喜欢
      • 2016-02-16
      • 2021-10-01
      • 2021-08-10
      • 2015-07-07
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 2019-06-14
      • 2019-02-14
      相关资源
      最近更新 更多