这是第一次写博客,写的不好请多多包涵。
这篇博客主要是介绍一下有关于协程的一些基本介绍。
首先先写一段最基本的协程代码:
public class Coroutine : MonoBehaviour {
private int i;
private void Start()
{
i = 0;
StartCoroutine(Once());//调用协程
}
IEnumerator Once()
{
while (true)//无限循环
{
Debug.Log(i);//在控制面板中输出i的值;
yield return newWaitForSeconds(3f);//协程等待3秒后继续执行
i++;//i自增1
}
}
}运行结果:
协程嵌套:
public class Coroutine : MonoBehaviour {
private int i;
private void Start()
{
i = 0;
StartCoroutine(Once());//调用协程
}
IEnumerator Once()
{
while (true)//无限循环
{
Debug.Log(i);//在控制面板中输出i的值;
yield return StartCoroutine(Two());//暂停本协程启用协程wait直到wait协程结束
yield return newWaitForSeconds(3f);//协程等待3秒后继续执行
i++;//i自增1
}
}
IEnumerator Two()
{
yield return new WaitForSeconds(1.0f);
Debug.Log("嵌套协程");
}
}运行结果:
这些最基本的使用方法之一,一般情况下都是用于作独立的计算。
协程常用方法:
yield return new WaitForSeconds(seconde);是指协程在暂停seconde秒之后程序继续执行。
StartCoroutine(协程名(参数));//调用协程的方法。
yield return 0;//返回一个固定的返回值,不管0替换成什么值,永远是一帧执行。也就是说,yieldreturn 0;相当于暂停一帧。
yield return StartCoroutine(协程名());//暂停协程,知道调用的协程执行完毕。协程嵌套的基础。
StopAllCoroutines();//停止当前脚本的所有协程。
StopCoroutine(协程名);//通过协程名停止当个协程,注意:被停止的协程不能带有参数。
关于协程的一些小知识:
1.在程序中调用StopCoutine()方法只能终止以字符串形式启动(开始)的协程;
2.多个协程可以同时运行,它们会根据启动的顺序来进行更新;
3.如果想要多个脚本访问同一个协程,那么可以定义静态协程;
4.协程不是多线程(尽管看上去好像是这样),它们运行在同一线程当中,跟普通的脚本一样。
5.如果程序需要进行大量的运算,那么可以考虑在一个随时间进行的协程中处理它们;
6.IEnumerator类型方法不能带ref或者out型整数,但可以带被传递的引用;
7.协程可以嵌套多层;
8.目前在Unity中,没有简便的方法来检测作用于对象的协程数量以及具体是哪些协程作用在对象上。