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。
我已经为后退按钮事件编写了以下代码。
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。