gpt4 book ai didi

c# - 协程函数停止在 WaitForSeconds

转载 作者:行者123 更新时间:2023-11-30 21:33:15 28 4
gpt4 key购买 nike

我的协程函数只能运行一次。 _isPaused 变量为 true。找不到我做错了什么。

IEnumerator Movement() 
{
while (_isPaused) // I checked, it's true
{
Debug.Log("Some action");
yield return new WaitForSeconds(0.8f);
}
}

void Update ()
{
if (Input.GetKeyDown(KeyCode.P))
{
StartCoroutine(Movement());
}
}

Here是完整的代码:

最佳答案

这是您的代码:

while (_isPaused) 
{
Debug.Log("Some action");
yield return new WaitForSeconds(0.8f);
}

您的 while 循环将在到达 WaitForSeconds 时暂停。它会暂停,因为您在按下“P”时在代码中的某处将 Time.timeScale 设置为 0。这种行为是正常的。这样做是为了让您可以使用 Time.timeScale 暂停协程函数。一旦您将 Time.timeScale 设置回 1,它将暂停并继续运行。


如果您不希望 Time.timeScale 在使用 WaitForSeconds 等待时暂停协程函数,则使用 WaitForSecondsRealtime 而不是 WaitForSeconds

while (_isPaused) 
{
Debug.Log("Some action");
yield return new WaitForSecondsRealtime(0.8f);
}

这是因为 WaitForSeconds 是用 Time.deltaTime 或类似的属性实现的,当 Time.timeScale 设置为 0 导致计时器暂停,而 WaitForSecondsRealtime 是使用 Time.realtimeSinceStartup 实现的,它不受 Time 的影响.timeScale 完全没有。

关于c# - 协程函数停止在 WaitForSeconds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51566097/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com