延迟功能是否比WaitForSeconds()更快?

时间:2015-12-15 03:13:40

标签: unity3d

我有一个需要延迟功能的项目,这不需要很长时间..我尝试使用WaitForSeconds()但结果也花费了太长时间。

我已经给出了小参数0.0000000001f并且它仍然相同,没有任何变化。

如何获得比此函数更快的延迟(WaitForSeconds())???

提前致谢:)

3 个答案:

答案 0 :(得分:1)

你能做到的一种方法是使用

Update() {
}

每个框架调用的功能;)

答案 1 :(得分:1)

" 延迟时间超过0.0000000001f "这听起来很混乱,因为这段时间你几乎不需要延迟。或者也许我只是没有得到它。但是......好吧,让我们尝试一些有用的东西。您可以使用Invoke

Invoke("methodname");

这将是即时的。如果你需要一个微小的打嗝,做这样的事情调整逗号之后的时间(以秒为单位):

Invoke("methodname", 0.01f);

如果您想要像Update()方法那样修复某些内容,但速度不是很快,则可以尝试使用FixedUpdate方法获取固定帧速率方法。

FixedUpdate(){
//code here: slower than Update(); But time fixed instead of Invoke();
}

或者也许尝试Coroutines特定时间的东西。

答案 2 :(得分:1)

您不能将WaitForSeconds用于此类目的,因为它是通过Unity中的Coroutine系统处理的,并且Coroutine间隔检查的速率与您的FrameRate(大约15-30ms间隔)几乎相同。因为Coroutines不是线程,事实上Coroutines和其他与Monobehaviour相关的东西都在同一个线程(主线程)上运行。所以很可能如果你使用新的WaitForSeconds(0.0001f)它几乎与新的WaitForSeconds(0.01f)相同。

我不确定你为什么在程序中需要这么小的延迟,但由于这种延迟可能不会影响你的帧率,你可以使用System.Threading.Thread.Sleep(... )或代码中的其他顺序延迟方法。但是,如果您的应用程序在后台使用SerialPort进行硬件连接(在游戏中不需要!),这需要很小的延迟,您可以在后台线程上进行这些工作,并使用调度队列与主线程共享结果。