协程是什么?
协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒继续执行后面的代码。
通俗点说:程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。
协程的运行
协程不是线程,也不是异步执行的。协程和 MonoBehaviour 的 Update函数一样也是在MainThread中执行的。
协同程序可以和主程序并行运行,和多线程有点类似。
协程的作用
1、延时(等待)一段时间执行代码;
2、等某个操作完成之后再执行后面的代码。
总结起来就是一句话:控制代码在特定的时机执行。
协程的定义
在C#中,协程返回值必须是Ienumerator,yield要用yield return 来替代,并且启动协同程序用StartCoroutine 函数
yield 和 IEnumerator都是C#的东西,他们是一个关键字,StartCoroutine是枚举类的接口。
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的输出。