TL,DR:使用Time.deltaTime作为协程中产量的等待时间是否安全?
通常为了避免在Update()中使用短暂的功能不必要的逻辑,我将运行一个协程.例如,在我的游戏中,我有一个缓慢的协程,定期检查NPC和播放器之间的距离,如果该距离低于某个阈值,我将运行更频繁的协程,使用光线投射等更昂贵的视线测试.这似乎比在Update()中不断检查所有内容更有效.
我的问题是:使用Time.deltaTime作为yield的等待时间是否安全,从而在协同程序的持续时间内模拟Update()? yield返回new WaitForSeconds(Time.deltaTime);
由于deltaTime不是常数,如果下一帧花费的时间长于最后一帧 – 协同程序会延迟到下一帧,或者是整个帧被延迟直到协程结束时发生的可怕事情?我很想让安全缓冲器,例如yield返回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,你通常在while循环中使用它除了另一个float变量之外你将递增或递减直到你达到想要的值.使用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");
}
原文地址:https://codeday.me/bug/20190611/1219271.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。