Time.TimeScale=0 时后退按钮不起作用的方法

Method for Back button not working when Time.TimeScale=0

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

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

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

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

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

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

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

但是,如果您想要 "dirty" 技巧,您可以将时间刻度减慢到非常低的数字,而不使用 0,即:10e-8。但请谨慎使用它,因为它可能会导致不良行为。

输入取决于时间尺度:GetButton() 工作正常但 GetAxis() 工作不一致,例如使用 GetAxis() 进行鼠标移动按预期工作,但水平和垂直 returns 0 当 timeScale 为 0 时。您可以使用 Input.GetAxisRaw().

解决此问题

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