网络知识 娱乐 Unity 协程

Unity 协程

目录

1.定义

2.使用

3.优化


1.定义

协程的本质是迭代器,unity协程是一个能够暂停协程执行,暂停后立即返回主函数,执行主函数剩余的部分,直到中断指令完成后,从中断指令的下一行继续执行协程剩余的函数。函数体全部执行完成,协程结束。由于中断指令的出现,使得可以将一个函数分割到多个帧里去执行。
使用场景:

  1. 延时调用某个函数
  2. 某块逻辑要一直循环判断执行

2.使用

引入命名空间
using System.Collections;
using UnityEngine;

开启协程:

// 形式一 
StartCoroutine(CustomCorutine()); 
StartCoroutine(CustomCorutine("haha"));//向方法中传递参数 
 
// 形式二 
StartCoroutine(“CustomCorutine”); 
StartCoroutine(“CustomCorutine”, "haha");//向方法中传递参数

终止协程:
在开发中可能会开启多个协程,如果你想停止其中某个协程,你可使用StopCoroutine,但在使用时,停止协程的方式要与开启协程的方法一致。

//方法一:用字符串代替函数名终止协程
StopCoroutine("Test");
//方法二:以协程的函数名为参数终止该协程,
StopCoroutine(Test());
//方法三:开启协程时记录下来,以Coroutine为参数终止协程
mCoroutine= StartCoroutine(Test());
StopCoroutine(mCoroutine);
//终止所有协程
StopAllCoroutines();

协程中yield return(遇到此代码,协程会将cpu的控制权让出去,等待条件完成再向下执行):

 Ⅰ 等待指定时间后执行

//在此等待1s后执行后面的代码
yield return new WaitForSeconds(1f);

Ⅱ 在FixedUpdate结束后再执行

//等到FixedUpdate结束后执行后面的代码
yield return new WaitForFixedUpdate();

Ⅲ 在每帧结束后执行下面的

//程序中该帧执行的事件都结束了,再执行后面的
yield return new WaitForEndOfFrame();

Ⅳ 在指定协程执行后执行下面的

IEnumerator WaitTest()
{
    //等待某个协程执行完毕后再执行后续代码
    yield return StartCoroutine(Test());
    Debug.Log("Good!");
}

Ⅴ 下一帧再执行下面的代码

IEnumerator WaitTest()
{
   //下一帧再执行下面的代码
   yield return null; 
   Debug.Log("Good!");

   //下一帧再执行下面的代码
   yield return 0;//(这里可以填任意数字)
   Debug.Log("haha!");
}

Ⅵ 直接结束该协程的接下来的操作

//直接结束该协程的后续操作
yield break; 

3.优化

Unity内的协程,在yield return 时不要每次都new一个,可以在之前创建一个变量做为代替

//全局中断指令
WaitForSeconds waitForSeconds = new WaitForSeconds(5f);

void Start()
{
    //开启协程
    StartCoroutine(Test());
}

IEnumerator Test()
{
    Debug.Log("开始");
    yield return waitForSeconds;
    Debug.Log("已经开始了 5s 了");
}