gpt4 book ai didi

c# - Unity3D - 使用 Time.deltaTime 作为协程的等待时间

转载 作者:太空狗 更新时间:2023-10-30 00:38:47 25 4
gpt4 key购买 nike

TL,DR:在协程中使用 Time.deltaTime 作为 yield 的等待时间是否安全?

通常为了避免 Update() 内部不必要的逻辑以实现短暂的功能,我会改为运行协程。例如,在我的游戏中,我有一个慢速协程,它会定期检查 NPC 和玩家之间的距离,如果该距离低于某个阈值,我将运行一个更频繁的协程,并使用光线转换等进行更昂贵的视线测试。这似乎比在 Update() 中不断检查所有内容要高效得多。

我的问题是:使用 Time.deltaTime 作为 yield 的等待时间,从而在协程期间模拟 Update() 是否安全?即 yield return new WaitForSeconds(Time.deltaTime);

由于 deltaTime 不是常量,如果下一帧花费的时间比上一帧长,会发生什么情况——协程是延迟到下一帧,还是发生了一些可怕的事情,比如整个帧都被延迟到协程完成?我很想允许一个安全缓冲区,例如yield return new WaitForSeconds(Time.deltaTime * 1.2f); 但理想情况下,我希望它精确地执行每一帧。

最佳答案

is it safe to use Time.deltaTime as the wait time for the yield in a coroutine?

。这不是使用 WaitForSeconds 函数的方法。 WaitForSeconds 以秒为单位作为参数,而不是 Time.deltaTime 在每一帧中提供的微小值。

下面是如何使用 WaitForSeconds 函数的示例。

IEnumerator waitFunction1()
{
Debug.Log("Hello Before Waiting");
yield return new WaitForSeconds(3); //Will wait for 3 seconds then run the code below
Debug.Log("Hello After waiting for 3 seconds");
}

关于 Time.deltaTime 的等待,除了另一个 float 变量外,您通常在 while 循环中使用它 incrementdecrement 直到达到想要的值。使用 Time.deltaTime 的好处是您可以在等待时看到还剩多少等待时间。您可以将其用于倒计时或倒计时。您还将 yield return null; 放在 while 循环中,这样 Unity 将允许其他脚本也运行并且您的应用程序不会卡住。以下是如何使用 Time.deltaTime 等待 3 秒的示例。您可以轻松地将其变成倒数计时器。

IEnumerator waitFunction2()
{
const float waitTime = 3f;
float counter = 0f;

Debug.Log("Hello Before Waiting");
while (counter < waitTime)
{
Debug.Log("Current WaitTime: " + counter);
counter += Time.deltaTime;
yield return null; //Don't freeze Unity
}
Debug.Log("Hello After waiting for 3 seconds");
}

关于c# - Unity3D - 使用 Time.deltaTime 作为协程的等待时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38473399/

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