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

时间:2016-09-05 16:42:30

标签: c# 2d unity5

我是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");
        }
    }
}

有一个问题。我使用了两条Debug行来查看这里到底发生了什么。 第一个是当我的车与Player碰撞时说“TRIGGER”,它工作正常。 但第二个是保持沉默。每辆车都有一个特定的数字公共字符串carTitle ,如果我的车是98号,当汽车和玩家碰撞时,玩家点击按钮F,它应该加载一个新的场景。我对吗?但没有任何反应。

2 个答案:

答案 0 :(得分:1)

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

  • OnTriggerEnter2D只会在一个角色中执行,正好在对手进入触发器时。

  • 输入.GetButtonDown()只会在按下按键时为一个循环。

因此,对于要满足的条件,您应该在进入触发器的同一循环中按下“F”键。这当然是极其不切实际的。

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

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

答案 1 :(得分:0)

我使用的是OnTriggerStay2D,所以现在它运行正常。

 void OnTriggerStay2D(Collider2D other)

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

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

}