【问题标题】:Method for Back button not working when Time.TimeScale=0Time.TimeScale=0 时后退按钮不起作用的方法
【发布时间】:2017-03-13 17:14:06
【问题描述】:

我已经为后退按钮事件编写了下面的代码。

void Update()
{
    if (Input.GetKey(KeyCode.Escape))
    {
        SceneManager.LoadScene("PreviousLevel");
    }  
}

在几乎所有情况下,这都很好。但是我发现了一个小问题。当用户暂停游戏时,这不起作用。当用户暂停游戏时,我执行 Time.timeScale=0。最初,我考虑修改暂停方法,而不是执行 Time.timeScale=0,而是使用布尔变量并相应地修改其他暂停逻辑。但后来我也意识到我有超过 14 个协程,它们的逻辑严重依赖于 Time.timeScale 并且修改它们需要很多时间。它们严重依赖 time.timeScale。

我想知道,有没有其他方法可以写回按钮逻辑并且不依赖于 Time.timeScale。

【问题讨论】:

    标签: unity3d unity5


    【解决方案1】:

    它应该可以工作,Unity 中的输入轮询不依赖于时间尺度。

    尝试在条件中插入Debug.Log,您应该会在控制台中看到它。

    注意如果将 if 放入 FixedUpdate 而不是 Update:在这种情况下它将不起作用,因为当时间刻度为 0 时完全跳过 FixedUpdate

    但是,如果您想要一个“肮脏”的技巧,您可以将时间刻度减慢到一个非常低的数字,而不使用 0,即:10e-8。但要小心使用它,因为它会导致不良行为。

    【讨论】:

      【解决方案2】:

      输入取决于时间刻度:GetButton() 正常工作但GetAxis() 工作不一致,例如使用GetAxis() 使鼠标移动按预期工作,但是当 timeScale 为 0 时获取水平和垂直返回 0。你可以得到通过使用Input.GetAxisRaw() 来解决这个问题。

      还应注意,任何轴也算作一个按钮,因此您也可以在这些轴上使用GetButton(),但返回值将是 bool 而不是 float。

      【讨论】:

        猜你喜欢
        • 2022-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-27
        • 2014-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多