Unity协程

本文介绍了Unity协程的主要作用,包括延时执行和等待特定操作完成。协程通过IEnumerator返回值作为迭代器来实现,yield关键字用于标记暂停点。在每一帧中,Unity根据yield return的值决定何时继续执行协程。理解并正确使用yield可以实现复杂的定时或异步操作。欢迎讨论和指正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

协程的作用一共有两点:
1)延时(等待)一段时间执行代码;
2)等某个操作完成之后再执行后面的代码。

简单来说,协程就是:你可以写一段顺序的代码,然后标明哪里需要暂停,然后在下一帧或者一段时间后,系统会继续执行这段代码。

Unity一个协程函数的返回值是IEnumerator,它是一个迭代器。

下面是协程实现的原理

for(float timer = 3; timer >= 0; timer -= Time.deltaTime)
{
    //空,什么都不执行
    Just do nothing...
}

Debug.Log("三秒过去了");

协程的代码

using UnityEngine;
using System.Collections;

public class CoroutineCountdown : MonoBehaviour
{
    void Start()
    { 
        //启用协程的代码,不写的话协程不会执行
        //必须在Start里启用
        StartCoroutine(Countdown());
    }
    //协程的接口,直接在里面实现即可
    IEnumerator Countdown()
    {
        //表示延迟的时间,延时两秒
        yield return new WaitForSeconds(2);
    }
}
//终止掉所有协程
StopAllCoroutines();
//终止掉一个协程
StopCoroutine();//传入方法名或者方法的"字符串"

下面是解释yield的作用

 void Start()
    {
        StartCoroutine(Countdown());
    }

    IEnumerator Countdown()
    {
        for(float timer = 3; timer >= 0; timer -= Time.deltaTime)
            //告诉上面停止这个方法,然后重新开始
            //循环三次后for循环条件无法满足就无法执行这条代              //            码,然后三秒过去了
            yield return 0;

        //可以直接这样写比较精简
        //yield return new WaitForSeconds(3);

        Debug.Log("三秒过去了");
    }

为了能在连续的多帧中(在这个例子中,3秒钟等同于很多帧)调用该方法,Unity必须通过某种方式来存储这个方法的状态,这是通过IEnumerator 中使用yield return语句得到的返回值,当你“yield”一个方法时,你相当于说了,“现在停止这个方法,然后在下一帧中从这里重新开始!”。
注意:用0或者null来yield的意思是告诉协程等待下一帧,直到继续执行为止。当然,同样的你可以继续yield其他协程。

有什么不对的地方欢迎指出 ,一起学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值