您的位置:首页 > 其它

u3d学习笔记一:协程的使用

2018-04-10 19:21 204 查看
协程的定义:

    协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒执行后面的代码。

    Unity在每一帧都会去处理对象上的协程,主要是在Update后去处理协程(检查协程的条件是后满足)。协程跟Update()实质上是一样的,都是Unity每帧都会去处理的函数。
协程函数是用关键字IEnumerator来声明的函数,在函数中配合用yield return使用,用StartCoroutine()函数来调用。上一个例子先:
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;

public class Done_GameController : MonoBehaviour
{
public float startWait;
public float waveWait;

void Start ()
{
StartCoroutine (SpawnWaves ());
}

void Update ()
{
}

IEnumerator SpawnWaves ()
{
yield return new WaitForSeconds (startWait);
while (true)
{
yield return new WaitForSeconds (waveWait);
}
}
}yield return可以返回值可以如下:yield return null; // 下一帧再执行后续代码
yield return 0; //下一帧再执行后续代码
yield return 6;//(任意数字) 下一帧再执行后续代码
yield break; //直接结束该协程的后续操作
yield return asyncOperation;//等异步操作结束后再执行后续代码
yield return StartCoroution(/*某个协程*/);//等待某个协程执行完毕后再执行后续代码
yield return WWW();//等待WWW操作完成后再执行后续代码
yield return new WaitForEndOfFrame();//等待帧结束,等待直到所有的摄像机和GUI被渲染完成后,在该帧显示在屏幕之前执行
yield return new WaitForSeconds(0.3f);//等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的时间会受到Time.timeScale的影响);
yield return new WaitForSecondsRealtime(0.3f);//等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的时间不受到Time.timeScale的影响);
yield return WaitForFixedUpdate();//等待下一次FixedUpdate开始时再执行后续代码
yield return new WaitUntil()//将协同执行直到 当输入的参数(或者委托)为true的时候....如:yield return new WaitUntil(() => frame >= 10);
yield return new WaitWhile()//将协同执行直到 当输入的参数(或者委托)为false的时候.... 如:yield return new WaitWhile(() => frame < 10);对于StartCoroutine()函数的理解,可以参考下面博客:
https://blog.csdn.net/tkokof1/article/details/11842673

解析的挺详细的
以上都是个人从网上搜索整理的资料,仅为个人参考。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: