我在游戏中有这个迷你任务,你需要点击奖杯来改变它们上面木头的颜色。我有两个颜色数组,一个是包含所有可能颜色的数组,另一个包含四种颜色(答案)如下:
我仔细检查了两个阵列之间的颜色是否相等。例如,Colors-array
中的紫色完全相同 r,g,b& Right Order-array
中的值为紫色。
为了检查奖杯是否具有正确的颜色,我只是循环穿过它们并抓住它们的材料颜色。然后我检查了Right Order-array
的颜色,但它不是很有效。例如,当我的第一个奖杯是紫色时,它应该是正确的,但不是因为出于某种原因,Unity返回的材料颜色与例外情况略有不同:
希望有人知道为什么会这样。
答案 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记录到此数组中,同时将颜色分配给渲染器。此外,在为渲染器指定颜色的同时,记录每个"按钮"的索引。
然后您可以简单地比较调色板索引值(简单整数)以查看颜色是否匹配。