Unity 5,如果 "if statement" 正确则加载新场景

Unity 5, loading new scene if "if statement" is correct

我是 Unity 的新手,所以.. :) 我正在制作 2D 游戏,我的角色应该按 F 进入汽车,Unity 应该加载一个新场景。这是我的 C# 代码:

void OnTriggerEnter2D(Collider2D other)

{
    if (other.tag == "Player")
    {
        //Debug.Log("TRIGGER");
        if (carTitle == "98" && Input.GetKeyDown(KeyCode.F))
        {
            SceneManager.LoadScene("NewScene");
            //Debug.Log("TRIGGER 98");
        }
    }
}

有问题。我使用了两条调试线来查看这里究竟发生了什么。 第一个是说 "TRIGGER" 当我的车与 Player 相撞时,它工作正常。 但是第二个保持沉默。每辆车都有一个特定的编号 public string carTitle,如果我的车是 98 号并且玩家在汽车和玩家碰撞时按下按钮 F,它应该加载一个新场景。我对吗?但是没有任何反应。

我用的是OnTriggerStay2D,所以现在可以正常使用了。

 void OnTriggerStay2D(Collider2D other)

{
    if (other.tag == "Player" && Input.GetButtonDown("Use"))
    {

        if (carTitle == "98")
        {
           SceneManager.LoadScene("NewScene");
        }
    }

}

我看到你已经解决了问题,但我想花点时间解释一下为什么它不起作用:

  • OnTriggerEnter2D 只会在一个循环期间执行,就在对撞机进入触发器时。

  • Input.GetButtonDown(),只有一个循环,当按键被按下时才为真。

因此,为了满足条件,您应该在输入触发器的同一周期内按下 "F" 键。这当然是非常不切实际的。

如果你想在玩家按下 F 键时改变场景,使用 OnTriggerStay2D 是你正在寻找的回调。

如果你想换场景,只有当你按住F键进入触发器时,你应该使用Input.GetButton()