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
解析的挺详细的
以上都是个人从网上搜索整理的资料,仅为个人参考。
协程是一个分部执行,遇到条件(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
解析的挺详细的
以上都是个人从网上搜索整理的资料,仅为个人参考。
相关文章推荐
- 【Lua学习笔记】Lua中协程的使用
- JSP学习笔记(二)-----使用Tomcat运行JSP文件
- JbuilderX使用Junit学习笔记
- 学习笔记,VB.NET使用DirectSound9 (1) 简单播放
- (学习笔记)使用sqlcommand执行存储过程!
- 学习笔记,VB.NET使用DirectSound9 (2) 声音的特性
- C#中使用Property Grid 控件 学习笔记(一)
- C# 学习笔记 -- 第二天 使用注释提高代码可读性
- 学习笔记之引用的使用
- 原创-IBM DB2学习笔记-1:日期以及时间的使用
- C#学习笔记(十六):使用打开保存文件对话框
- C#学习笔记(十六):使用打开保存文件对话框
- C#学习笔记(二十一):使用文件基础
- PHP学习笔记(3)----phpmyadmin的安装与使用[原创]
- JSP学习笔记(三)-----使用JSP处理用户注册和登陆
- JSP学习笔记(五)-----JSP中使用JavaBean
- Chap 4 学习笔记-使用C#存储变量数据
- LINUX学习笔记—SAMBA使用篇 smb 文件共享
- C# 学习笔记 -- 第三天 申明和使用数据
- Servlet学习笔记(四)-----使用Servlet处理用户注册和登陆