Unity协程:协同程序

协程是什么?

协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒继续执行后面的代码。
通俗点说:程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。

协程的运行

协程不是线程,也不是异步执行的。协程和 MonoBehaviour 的 Update函数一样也是在MainThread中执行的。
协同程序可以和主程序并行运行,和多线程有点类似。

协程的作用

1、延时(等待)一段时间执行代码;
2、等某个操作完成之后再执行后面的代码。
总结起来就是一句话:控制代码在特定的时机执行。

Unity协程:协同程序_第1张图片
Paste_Image.png

协程的定义

在C#中,协程返回值必须是Ienumerator,yield要用yield return 来替代,并且启动协同程序用StartCoroutine 函数
yield 和 IEnumerator都是C#的东西,他们是一个关键字,StartCoroutine是枚举类的接口。

Unity协程:协同程序_第2张图片
Paste_Image.png
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Threading;

public class xiecheng : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(One());//开启协成
        for (int i = 0; i < 200; i++)//循环A
        {
            Debug.Log("————" + i);
            Thread.Sleep(10);
        }
    }
    IEnumerator One()
    {
        for (int i = 0; i < 100; i++)//循环B
        {
            Debug.Log("***********" + i);
        }
        yield return new WaitForSeconds(1f);//协程1
        for (int i = 0; i < 100; i++)//循环C
        {
            Debug.Log("$$$$$$$$$$" + i);
            yield return null;//协程1
        }
    }
    void Update()
    {
        Debug.Log("upda");
    }
    void LateUpadate()
    {
        Debug.Log("------LateUpadate");
    }
}

运行结果:先执行循环B,然后执行循环A,然后执行update()和lateUpdate()的方法,等待1S之后,在updat()和lateupda()之间执行循环C的输出。

你可能感兴趣的:(Unity协程:协同程序)