0

我需要关于我正在创建的游戏的帮助。我正在使用 Unity 引擎构建游戏,并且对 C# 编码非常陌生。我正在创建一个 2d 游戏,其中玩家控制正方形的颜色,并且当它通过某个颜色的对象时必须将其更改为正确的颜色。玩家改变颜色很大,物体是触发器。当玩家通过触发器时,如果它的颜色不正确,则玩家死亡。好吧,这很完美,但仅适用于第一个对象,无论对象死亡的玩家颜色如何,下一个对象都是如此。我已经尝试过 if 语句中的 if 和 else 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; 
    } 
}
4

1 回答 1

0

您的执行顺序有点混乱,这可能是它不起作用的原因。试着让你的所有逻辑都遵循一条路径,而不是两条。现在,你是:

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

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

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

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

于 2015-03-06T20:10:11.503 回答