我想做一个游戏,在那里你飞和通过门,并尝试匹配的门的颜色和你的颜色.但我需要一些帮助,在匹配的颜色,因为你看,我有像3个门,我做了,他们可以得到一个随机的颜色,但我如何做到这一点,当我,,colide''或相交的门比较的颜色.如果颜色匹配,你可以继续,如果没有,然后游戏结束.这里是我的脚本。我在播放器上的代码。
public void ColorChange()
{
int colors = Random.Range(0, color.Length);
material.color = color[colors];
myColor = color[colors];
}
我在三门上的代码
public void ColorChange()
{
int color1 = Random.Range(0, color.Length);
int color2 = Random.Range(0, color.Length);
int color3 = Random.Range(0, color.Length);
material[0].color = color[color1];
material[1].color = color[color2];
material[2].color = color[color3];
}
你的门和船首先需要是物理对象。至少你需要添加 刚体 并适当 边界卷 或 碰撞器 对他们来说,(因为大门一 盒装机 例如)。) 您的盖茨也应该是 触发器不然的话,船就不能进入大门,而是要撞上它。
现在是有趣的部分。这扇门应该有一个 OnTriggerEnter
方法,我们可以测试这两种颜色。问题是,你不能直接比较颜色(颜色上没有平等运算符),事实上你也不应该这样做。一个解决方案是利用一个小的误差范围来比较颜色的每一个单独的成分,请注意,这个 不尽如人意 但对于游戏来说应该是不错的。
class ColorGate : MonoBehaviour
{
public Color gateColor;
private void OnTriggerEnter(Collider other)
{
var playerShip = other.gameObject as PlayerShip;
var c1 = playerShip.currentColor;
var c2 = gateColor;
if(Math.Abs(c1.r - c2.r) < 0.01f &&
Math.Abs(c1.g - c2.g) < 0.01f &&
Math.Abs(c1.b - c2.b) < 0.01f
/*&& Math.Abs(c1.a - c2.a) < 0.01f only if you really need it*/ )
{
// colors match!
}
else
{
// colors don't match
}
}
}