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


具体用法上面注释已经写清楚了,上面这种写法会显示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不是很稳定(具体可以参考这篇,作者写的很详细)所以上面这种方法是很实用的


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

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值