WaitForSeconds在暂停时的表现
当在协程中使用WaitForSeconds(2)指令等待2秒,其行为与Unity的时间缩放系统(Time.timeScale)直接相关。
基本行为
WaitForSeconds依赖于Time.timeScale来计算实际等待时间- 当
Time.timeScale = 0(游戏暂停)时,WaitForSeconds会无限期等待 - 这是因为
WaitForSeconds实际上是等待的游戏时间而非真实时间
行为示例
IEnumerator ExampleCoroutine()
{
Debug.Log("协程开始");
yield return new WaitForSeconds(2); // 应等待2秒
Debug.Log("协程结束"); // 如果Time.timeScale=0,这一行永远不会执行
}
void PauseGame()
{
Time.timeScale = 0; // 暂停游戏
}
当Time.timeScale = 0时,上面的协程会永远停在WaitForSeconds(2)处,因为游戏时间不再流逝,2秒的等待永远不会结束。
让协程在暂停时完全冻结的方法
有几种方法可以确保协程在游戏暂停时也完全冻结:
1. 使用WaitForSecondsRealtime
WaitForSecondsRealtime使用真实时间而非游戏时间,不受Time.timeScale影响:

最低0.47元/天 解锁文章
232

被折叠的 条评论
为什么被折叠?



