赞
踩
有关Unity协程的说明详见官方Manual(官方文档写的非常详细,也有很多协程的例子,墙裂推荐入门选手反复咀嚼,不过有点考量英文水平,所以英语对程序员的重要性不用多说了)
直接上代码:
// StartCoroutine (Func()); <-- This is the call in the function for update. //make sure use this method to call coroutines. IEnumerator Func() { while(true)// or for(i;i;i) { yield return new WaitForSeconds(2.0f); // first //Specific functions put here Debug.Log(Time.time); // then // Note the order of codes above. Different order shows different outcome. } }
具体用法上面注释已经写清楚了,上面这种写法会显示0s,2s,4s……,如果yield在前则会输出2s,4s……效果如下图(精准度受到unity帧率和秒整数不能对齐的限制
协程也是在线程内的,所以也会逐帧调用,只不过通过 “yield+等待时间” 的方式暂时挂起,来实现一个延时的效果
还有其他的延时重复效果,例如 if (Time.time取余) 嵌套等,个人感觉没有协程效果好所以这里不作推荐。
另外一种我感觉比较好的方式是利用deltatime
代码如下:
private float passedTime; // default 0 public float targetTime; // set time interval //Repete(); <-This is the call in the function for update. void Repete() { if(passedTime>targetTime) { // put function here Debug.Log(Time.time); // passedTime = 0; //enter next loop } passedTime += Time.deltaTime;
这种方式没有用到协程,仅仅利用线程中每一帧的刷新
deltatime的用途很广,详细的原理建议参考这个博文
由于update的刷新频率受到游戏帧率影响,fixupdate不是很稳定(具体可以参考这篇,作者写的很详细)所以上面这种方法是很实用的
后续方法有改进会及时更新,欢迎指正!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。