C# Unity 5,加载新场景,如果“;“如果声明”;是正确的

C# Unity 5,加载新场景,如果“;“如果声明”;是正确的,c#,2d,unity5,C#,2d,Unity5,我是Unity的新手,所以……) 我正在做2D游戏,我的角色应该按F键进入汽车,Unity应该加载一个新场景。这是我的C代码: 有个问题。我使用了两行调试代码来查看这里到底发生了什么。 第一个是说“触发器”,当我的车与玩家相撞时,它工作正常。 但第二个是保持沉默。每辆车都有一个特定的编号公共字符串carTitle,如果我的车是98号,当车和玩家发生碰撞时,玩家按下按钮F,它应该加载一个新场景。我说得对吗?但是什么也没发生。我使用了OnTiggerStay2D,所以现在它可以正常工作了 void

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

有个问题。我使用了两行调试代码来查看这里到底发生了什么。 第一个是说“触发器”,当我的车与玩家相撞时,它工作正常。
但第二个是保持沉默。每辆车都有一个特定的编号公共字符串carTitle,如果我的车是98号,当车和玩家发生碰撞时,玩家按下按钮F,它应该加载一个新场景。我说得对吗?但是什么也没发生。

我使用了OnTiggerStay2D,所以现在它可以正常工作了

 void OnTriggerStay2D(Collider2D other)

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

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

}

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

  • OnTriggerEnter2D将仅在碰撞器进入触发器时的一个循环中执行

  • Input.GetButtonDown()仅在按下该键的一个周期内为真

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

如果你想在玩家按下F键的同时改变场景,使用OnTiggerStay2D就是你要寻找的回调


如果要更改场景,只有在按住F键的同时输入触发器时,才应该使用Input.GetButton()

在第二个If语句上设置断点,查看实际值是否与预期值相同。是的,carTitle=98,KeyCode=F,但仍然没有任何结果。但是如果我删除我的Input.GetKeyDown(KeyCode.F),只留下carTitle复选框,它就可以正常工作。读取钥匙时出错。此脚本附加到我的汽车,而不是播放器。这有关系吗?谢谢,我想我现在明白了!:)
 void OnTriggerStay2D(Collider2D other)

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

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

}