当前位置:   article > 正文

Unity 实现每隔一段时间重复执行_unity 重复执行某个协程

unity 重复执行某个协程

协程

有关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.
        }
    }


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

具体用法上面注释已经写清楚了,上面这种写法会显示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;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

这种方式没有用到协程,仅仅利用线程中每一帧的刷新
deltatime的用途很广,详细的原理建议参考这个博文
由于update的刷新频率受到游戏帧率影响,fixupdate不是很稳定(具体可以参考这篇,作者写的很详细)所以上面这种方法是很实用的


后续方法有改进会及时更新,欢迎指正!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/94401
推荐阅读
相关标签
  

闽ICP备14008679号