触发器没有响应我想要的统一性3d

时间:2015-03-06 19:15:24

标签: c# unity3d unity3d-2dtools

我正在创建一款游戏需要帮助。我正在使用Unity引擎构建游戏,而且我对C#编码很陌生。我正在创建一个2D游戏,其中玩家控制正方形的颜色,并且必须将其更改为正确的颜色,就像它通过某个彩色对象时一样。玩家改变颜色很好,对象是触发器。当玩家通过触发器时,如果玩家的颜色不正确,玩家就会死亡。嗯,这是完美的,但只有第一个对象下一个对象,无论对象死亡的玩家的颜色。如果我在if语句中已经尝试了,那么如果我似乎无法解决这个问题。非常感谢您的帮助!

以下是播放器的代码

void OnTriggerEnter (Collider other)
{
    if (other.transform.tag == "Blue") {
        blue = true;
    }
    else {
        blue=false;
    }

    if (other.transform.tag == "Red") {
        red = true;
        } 
    else {
        red =false;
    }

    if (other.transform.tag == "Blue" && GameObject.Find ("Blue").GetComponent<Blue> ().mb == false) {
                    yield return 0;
                    Die ();
    } else if (other.transform.tag == "Red" && GameObject.Find ("Red").GetComponent<Red> ().mr == false) {
                    Die ();     
    }

}

以下是每个不同颜色对象的代码。这个恰好是蓝色的。

void Update () {
    if (GameObject.Find ("Player").GetComponent<Movement> ().blue == true && GameObject.Find ("Player").GetComponent<Movement> ().playerBlue == true) {
                    mb = true;  
            } else {
        mb = false;         
    }
    if (!GameObject.Find("Player").GetComponent<Movement>().blue) {
        mb = false; 
    } 
}

1 个答案:

答案 0 :(得分:0)

你的执行顺序有点乱,这可能就是为什么它不起作用。尝试让所有逻辑都遵循一条路,而不是两条路。现在,你是:

  • (1)碰撞,(2)设置一些布尔变量,(3)检查一些变量,(4)可选择死亡。
  • 在单独的类中的单独时间,设置在步骤1中设置的布尔值并设置在步骤3中检查的变量

这就是我们所说的意大利面条代码。一切都扭曲了。你能想出解开它的方法,所以两位逻辑不相互依赖吗?

例如,我在后面的代码块中看到,您正在检查播放器是否为蓝色。当玩家设置blue(或设置blue=false)时,您可以改为运行该代码吗?

编辑:我知道这并不是严格回答你的问题,但是解开问题是问题解决过程的第一步。