unity协程与迭代原理

    对于协程的理解,我认为最好的说法是:

    一段顺序的代码,然后标明哪里需要暂停,然后在下一帧或者一段时间后或者某个函数或协程执行完成之后,系统会继续执行后面代码。协程不是线程,也不是异步执行的。

这就说明它的两个作用,定时,迭代(与for,foreach一起用)  

举个例子,

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

StartCoroutine()就是开启一个协程,在Start()里调用,说明只在初始化的时候执行一次。

IEnumerator Move() {
       yield return null;
       yield return null;
       yield return StartCoroutine(Just1());
       yield return StartCoroutine(Just2());
       StartCoroutine(Jisuan());
      yield return null;
}

    yield作为其中最重要的,一个协程返回最少一个yield,可以有多个,上面return null,或者return 0, 1,2等等,表示暂缓一帧,数字没有意义,都只是暂缓一帧;yield return new WaitForSeconds (2)表示暂缓2秒;break表示退出协程,还有很多就不列举了。

while(true){

Debug.log(“hello”);

yield return null;

}
上面是个无限循环,加上yield return null 的作用显而易见,每帧执行一次,防止卡死,如果是下面的话
for(i=0;i<10;i++){
 Debug.Log("hello")
yieid return null;
}

这就是有限次循环,多用于游戏加载资源,倒计时等场景下。

协程其实就是一个IEnumerator(迭代器),IEnumerator 接口有两个方法 Current 和 MoveNext() ,只有当MoveNext()返回 true时才可以访问 Current,否则会报错。

Unity在每帧做的工作就是:调用 协程(迭代器)MoveNext() 方法,如果返回 true ,就从当前位置继续往下执行。协程跟Update()其实一样的,都是Unity每帧对会去处理的函数。





评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值