在Unity协程中,经常会使用到yield return new WaitForSeconds/WaitForSecondsRealtime。 WaitForSeconds会受到 Time.timeScale缩放的影响,而WaitForSecondsRealtime不受影响。 如果使用协程制作一个倒计时的话,每秒都new一下并不是一个好办法,往往可能会把WaitForSeconds缓存起来使用。WaitForSeconds缓存起来大家一起使用到没问题,...
实际暂停时间等于给定时间乘以Time.timeScale。如果要使用未缩放时间进行等待,请参阅WaitForSecondsRealtime。在协程中,WaitForSeconds只能与yield语句结合使用。 有一些因素可能意味着实际等待的时间量与指定的时间量不完全一致。\1.在当前帧的end处开始等待。如果您在一个非常长的帧(例如,具有同步加载等阻止主线程的长时...
Time.timeScale = 0; float waitTime=2; yield return new WaitForSeconds (waitTime); Debug.Log(“hi”); } 则“hi”永远输不出来。 欲在Time.timeScale=0的情况下wait一定时间,可用如下代码: IEnumerator f(){ Time.timeScale = 0; float waitTime = 2; float t = 0; while(true){ if(t==wai...
Except for realtimeSinceStartup, timeScale affects all the time and delta time measuring variables of the Time class. If you lower timeScale it is recommended to also lower Time.fixedDeltaTime by the same amount. FixedUpdate functions will not be called when timeScale is set to zero. 总结一下...
当timeScale为0时,协程中的WaitForSeconds将会失效。 一种解决办法是改用: 74.参数缓存 使用私有变量来缓存一些常用变量 75. 不要使用Camera.main (似乎并没有讲原因?) No: Yes: 76. readonly用于不会变动的字符串 经常使用且不发生变化的字符串可以用 readonly 前缀减少内存分配。
WaitForSeconds:为了在游戏暂停的时候延迟调用函数,使用了协程,StartCoroutine(某函数),携程中调用的函数使用了WaitForSeconds,一开始以为是协程的问题,后来一番查阅,知道了是WaitForSeconds的问题,它应该是计的timescale影响的时间,所以游戏暂停的时候不会执行,所以需要根据实际时间手动去实现: ...
值得注意的是 WaitForSeconds()受Time.timeScale影响,当Time.timeScale = 0f 时,yield return new WaitForSecond(x) 将不会满足。 以上其实说了这么多,就记住一个要点:当执行到yield语句的时候,代码权限就被交给调用它的父线程了,就把你给挂起了,外部根据你yield的条件,知道该什么时候去调用MoveNext(),当再次调...
73.WaitForSecondsRealtime 当时间缩放为0时(即Time.timeScale=0f),waitForSeconds方法将不会停止等待,后续代码也不会执行,此时可使用WaitForSecondsRealtime方法,如下代码所示: 代码语言:javascript 复制 Time.timeScale=0f;yieldreturnnewWaitForSecondsRealtime(1f); ...
FixedUpdate在realtime的调用次数受到timescale的间接影响,因为fixedDeltaTime值没有变,但gameworldtime流逝慢了,导致fixedupdate在realtime执行次数变少。 FixedUpdate functions and suspended Coroutines withWaitForSecondsare not called when timeScale is set to zero. ...
值得注意的是 WaitForSeconds()受Time.timeScale影响,当Time.timeScale = 0f 时,yield return new WaitForSecond(x) 将不会满足。 IEnumerator & Coroutine 协程其实就是一个IEnumerator(迭代器),IEnumerator 接口有两个方法 Current 和 MoveNext() ,这里在介绍一个协程的交叉调用类 Hijack(参见附件): ...