Unity返回的材料颜色略有错误

时间:2017-11-08 11:21:04

标签: unity3d

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

enter image description here

我仔细检查了两个阵列之间的颜色是否相等。例如,Colors-array中的紫色完全相同 r,g,b& Right Order-array中的值为紫色。

为了检查奖杯是否具有正确的颜色,我只是循环穿过它们并抓住它们的材料颜色。然后我检查了Right Order-array的颜色,但它不是很有效。例如,当我的第一个奖杯是紫色时,它应该是正确的,但不是因为出于某种原因,Unity返回的材料颜色与例外情况略有不同:

enter image description here

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

2 个答案:

答案 0 :(得分: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;

希望这有帮助。

答案 1 :(得分:0)

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

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