Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我有一个统一的项目,我与颜色工作,但我需要一些帮助_C#_Unity3d - Fatal编程技术网

C# 我有一个统一的项目,我与颜色工作,但我需要一些帮助

C# 我有一个统一的项目,我与颜色工作,但我需要一些帮助,c#,unity3d,C#,Unity3d,我试着做一个游戏,让你飞过大门,试着匹配大门的颜色和你的颜色。但是我需要一些帮助来匹配颜色,因为你看,我有3个大门,我让他们可以得到一个随机的颜色,但是当我,,colide“”或与浇口相交以比较颜色。例如,如果颜色匹配,则可以继续,如果不匹配,则结束。 这是我的脚本。 我的播放器代码: 我的三重门密码: public void ColorChange() { int color1 = Random.Range(0, color.Length); int color2 = R

我试着做一个游戏,让你飞过大门,试着匹配大门的颜色和你的颜色。但是我需要一些帮助来匹配颜色,因为你看,我有3个大门,我让他们可以得到一个随机的颜色,但是当我,,colide“”或与浇口相交以比较颜色。例如,如果颜色匹配,则可以继续,如果不匹配,则结束。 这是我的脚本。 我的播放器代码:

我的三重门密码:

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];
}

你的门和船首先需要是物理对象。至少您需要向它们添加适当的边界体积或碰撞器(例如门a)。你的大门也应该关闭,否则船将不被允许进入大门,而是撞上它

现在有趣的部分是:如果我们可以测试这两种颜色,门应该有一个
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
        }
    }
}
类彩色门:单行为
{
公共色彩;
专用空对撞机(对撞机其他)
{
var playerShip=other.gameObject作为玩家;
var c1=玩家数。当前颜色;
var c2=门色;
如果(数学Abs(c1.r-c2.r)<0.01f&&
数学Abs(c1.g-c2.g)<0.01f&&
数学Abs(c1.b-c2.b)<0.01f
/*&&Math.Abs(c1.a-c2.a)<0.01f,仅当您确实需要它时*/)
{
//颜色匹配!
}
其他的
{
//颜色不相配
}
}
}

您在哪里尝试编写
OnCollisionCenter
代码?问题出在哪里?@UnholySheep你是说OnTriggerEnter,有点误导性地暗示了一个错误的解决方案。@dowhilefor我不同意,因为OPs的问题不够具体,无法确定他们是否需要对撞机或触发器。即便如此,如果他们在官方文档中查找碰撞器和触发器,他们应该能够自行确定哪一个更适合他们的需要。最后我设法做到了。我在每个门上添加了触发器,例如,如果我触发了门2,脚本将检查玩家的颜色是否与材料编号2 becouse匹配2号登机口。无论如何,非常感谢你的帮助,我非常感激!完成问题后,记住将答案标记为有用。
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
        }
    }
}