Unity C#学习日志 Coroutine协程

LiFasT
LiFasT
Published on 2024-11-02 / 68 Visits
0
0

协程Coroutine

协程可以实现异步执行操作,但它实际上是依赖于Unity主线程的,也就是说不会产生新的线程,所以它的操作相对线程是简单的。

要定义一个协程,按照如下的形式:

IEnumerator [协程名]()
{
    yield return new WaitForSeconds(1);  //等待1s
    yield break;  //结束协程
}

若要操作协程,可以通过如下的一些函数:

StartCoroutine([协程方法]);  //开启协程
StopCoroutine([协程方法]);   //关闭特定协程
StopAllCoroutines();        //关闭所有协程

yield return

yield return可以在协程中进行操作,实现异步的效果,以下有一些常见的内容:

//暂停到下一帧再继续执行
yield return null;

//暂停指定的秒数后再继续执行
yield return new WaitForSeconds(2f);  // 等待2秒

//在当前帧所有渲染操作完成后执行,即在当前帧的最后
yield return new WaitForEndOfFrame();

//暂停到下一次物理帧(FixedUpdate)更新时继续执行。
yield return new WaitForFixedUpdate();

//等待满足指定条件时继续执行
yield return new WaitUntil(() => true == true);

//只要条件满足就持续等待,直到条件不再满足时继续执行
yield return new WaitWhile(() => false == true);

//等待另一个协程执行完毕再继续执行
yield return StartCoroutine([协程名]());

协程的案例

协程可以用来进行异步操作,如进行延迟操作或开设一个计时器。

这里有一个关于秒表的参考代码:

IEnumerator Timer()
{
    int time = 0;  //初始化时间变量
    while (true)  
    { 
        yield return new WaitForSeconds(1);  //每秒增加1
        Debug.Log(++time);  //打印当前记录值
    }
}


Comment