Unity之协程(Coroutine)

什么是协程?

在Unity主线程运行时,开启另外一段逻辑来协助当前程序的执行,即协程。

协程与线程、进程不同,协程的上下文切换是由程序员决定的,在开启协程后可以暂停协程执行,暂停之后会返回主函数(开启协程所在的函数),执行主函数剩余的部分,直到中断指令完成后,从中断指令的下一行继续执行协程函数的剩余部分,函数体执行完,协程即结束

创建一个协程

IEnumerator Test(int i)
{


}

开启协程

StartCoroutine(函数名(参数列表))

StartCoroutine("函数名",参数列表)

//StartCoroutine(函数名(参数列表))
StartCoroutine(Test(1));

//StartCoroutine("函数名",参数列表)
StartCoroutine("Test",1);

暂停协程

//关闭指定协程

StopCoroutine(函数名(参数列表))

StopCoroutine(“函数名”,参数列表)

//关闭所有协程

StopAllCoroutines()

关闭协程的方式一定要与关闭协程的方式一致


//StopCoroutine(函数名(参数列表))
StopCoroutine(Test(1));

//StopCoroutine(“函数名”,参数列表)
StopCoroutine("Test",1);

//关闭所有协程
StopAllCoroutines()

yield关键字

yield return null或yield return 数字 //协程将在下一帧所有脚本的update执行完后继续执行

yield return new WaitForSeconds(float time)//协程在延迟指定时间后且当前帧所有脚本的update全部执行完后才会继续执行 且当timescale=0,是不会执行

yield return new WaitForFixedUpdate() //协程在所有脚本的fixedupdate执行完后,再继续执行

yield return WWW("地址") //协程在www下载资源完成后,再继续执行

yield return StartCoroutine(协程) //协程在指定协程结束后,再继续执行

yield return WaitForSecondsRealtime //协程在延迟指定时间,且当前帧所有脚本的update全部执行后才会继续执行,不受时间缩放影响

  void Start()
  {
      StartCoroutine(Test());
      Debug.Log(Time.time);

  }


  void FixedUpdate()
  {
      Debug.Log("UPdate");
  }
  IEnumerator Test()
  {
      yield return new WaitForSeconds(1f);//延时1s后继续执行
      Debug.Log(string.Format("===>{0}  time:{1}", 1, Time.time));
      yield return new WaitForFixedUpdate();//协程在所有脚本的fixedupdate执行完后,再继续执行
      Debug.Log(string.Format("===>{0}  time:{1}", 2, Time.time));
  }

折叠看 程序结果

可以看到俩个红色三角的时间间隔约为1s这是“ yield return new WaitForSeconds(1f);”的原因

//延时1s后继续执行

展开看程序结果

可以看出“ yield return new WaitForFixedUpdate();//当前帧所有Fixedupdate执行完后执行”

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值