【问题标题】:Unity 5, loading new scene if "if statement" is correctunity 5、加载新场景“if语句”正确
【发布时间】:2016-09-05 16:42:29
【问题描述】:

我是 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 行来查看这里到底发生了什么。 当我的车与播放器相撞时,第一个是说“TRIGGER”,它工作正常。 但第二个保持沉默。每辆车都有一个特定的号码公共字符串carTitle,如果我的车是98号并且玩家在汽车和玩家碰撞时按下按钮F,它应该加载一个新场景。我对吗?但是什么也没发生。

【问题讨论】:

  • 在第二个 if 语句上设置断点,看看实际值是否符合您的预期。
  • 是的,carTitle = 98,KeyCode = F,但仍然没有任何反应。但!如果我删除我的 Input.GetKeyDown(KeyCode.F),只留下 carTitle 检查 - 它工作正常。读取密钥时出现问题。
  • 这个脚本附加到我的车上,而不是播放器上。有关系吗?

标签: c# 2d unity5


【解决方案1】:

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

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

  • Input.GetButtonDown(),只会在一个循环中为真,就在按键按下时。

因此,为了满足这些条件,您应该在输入触发器的完全相同的循环中按下“F”键。这当然是非常不切实际的。

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

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

【讨论】:

  • 谢谢,我想我现在明白了! :)
【解决方案2】:

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

 void OnTriggerStay2D(Collider2D other)

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

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

}

【讨论】:

    猜你喜欢
    • 2016-10-12
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多