1.概念解释

协程并非一个独立的线程。在Unity中。全部的语句都是在一个线程中运行的,也就是说。Unity是单线程的(详细的能够參见http://blog.csdn.net/alexander_xfl/article/details/41577625,这里面有对单线程的粗略解说)。

    那么协程究竟是什么呢?

    官方的定义是这种:

A coroutine is a function that is executed partially and, presuming suitable conditions are met, will be resumed at some point in the future until its work is done

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

实际上协程在后台与Update的运行原理是一样的。每一帧都会去推断是否满足运行条件,并据此推断是否运行。

2.作用与使用方法

a>延时一段时间

<span style="font-family:SimSun;">IEnumerator Fun() {
yield returnnewWaitForSeconds(5.0F);
//do something
}</span>

后面的代码会在延时5秒之后运行

b>等待其它事件完毕

<span style="font-family:SimSun;">IEnumerator Do() {
print("1");
yield returnnewWaitForSeconds(2);
print("2");
}
IEnumerator Fun() {
print("3")
yield returnStartCoroutine(Do());
print("4");
}</span>

运行Fun后。输出顺序为:3 1 2 4

c>开启一个伪线程做其它工作

<span style="font-family:SimSun;">IEnumerator Do() {
print("1");
yield return new WaitForSeconds(2);
print("2");
}
void Fun() {
print("3");
StartCoroutine(Do());
print("4");
}</span>

运行Fun后,输出顺序为:3 1 4 2

d>等一帧

<span style="font-family:SimSun;">Ienumerator Do()
{
while(true)
{
print("happy");
yield return null;//等待这一帧结束
//yield return new WaitForFixedUpdate(); //等待全部脚本的fixedupdate运行完成
//yield return new WaitForEndOfFrame();
}
}</span>

e>等待下载完毕

<span style="font-family:SimSun;">yield return new WWWContinue()</span>

f>yield break

不再运行兴许语句

这里仅仅是对Unity协程进行了简单的介绍和基本使用方法分析,事实上网上已经有了一些对Unity协程更透彻的分析,比如http://dsqiu.iteye.com/blog/2029701?utm_source=tuicool


[Unity-22] Coroutine协程浅析的更多相关文章

  1. Unity中的协程(一)

    这篇文章很不错的问题,推荐阅读英文原版: Introduction to Coroutines Scripting with Coroutines   这篇文章转自:http://blog.csdn. ...

  2. Unity C#笔记 协程

    什么是协程 协同程序,在主程序运行的同时,开启另外一段逻辑处理,来协同当前程序的执行. 可能看了这段文字介绍还是有点模糊,其实可以用多线程来比较. 多线程 多线程,顾名思义,多条同时执行的线程. 最初 ...

  3. Coroutine(协程)模式与线程

    概念 协程(Coroutine)这个概念最早是Melvin Conway在1963年提出的,是并发运算中的概念,指两个子过程通过相互协作完成某个任务,用它可以实现协作式多任务,协程(coroutine ...

  4. Kotlin Coroutine(协程): 二、初识协程

    @ 目录 前言 一.初识协程 1.runBlocking: 阻塞协程 2.launch: 创建协程 3.Job 4.coroutineScope 5.协程取消 6.协程超时 7.async 并行任务 ...

  5. Kotlin Coroutine(协程): 一、样例

    @ 目录 前言 一.直接上例子 1.延时任务. 2.异步任务 3.并行任务: 4.定时任务: 总结 前言 你还在用 Hanlder + Message? 或者 AsyncTask? 你还在用 Rxja ...

  6. 【Unity笔记】协程Coroutine的简单优化

    一个最简单的协程,也至少需要2帧才能完成.第一帧走到yield return null停止,第二帧从此处接着执行完下面的操作.需求:如果缓存中存在某数据则直接使用,否则联网异步下载. private ...

  7. Coroutine 协程

    https://en.wikipedia.org/wiki/Coroutine Coroutines are computer program components that generalize s ...

  8. Unity中的协程是什么?

    什么是协程? 1.协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒继续执行后面的代码. 2.Unity在每一帧(Frame)都会去处理对象上的协程.Unit ...

  9. coroutine协程

    如果你接触过lua这种小巧的脚本语言,你就会经常接触到一个叫做协程的神奇概念.大多数脚本语言都有对协程不同程度的支持.但是大多编译语言,如C/C++,根本就不知道这样的东西存在.当然也很多人研究如何在 ...

随机推荐

  1. Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use ...报错

    错误截图 Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* t ...

  2. 如何给run()方法传参数

    实现的方式主要有三种 1.构造函数传参 2.成员变量传参 3.回调函数传参 问题:如何实现处理线程的返回值? 1.主线程等待法(优点:实现起来简单,缺点:需要等待的变量一多的话,代码就变的非常臃肿.而 ...

  3. 什么是session?

    Session一般译作会话.从不同的层面看待session,它有着类似但不全然相同的含义.比如,在web应用的用户看来,他打开浏览器访问一个电子商务网站,登录.并完成购物直到关闭浏览器,这是一个会话. ...

  4. kubeadm1.14.1 安装Metrics Server

    Metrics API 介绍Metrics-Server之前,必须要提一下Metrics API的概念 Metrics API相比于之前的监控采集方式(hepaster)是一种新的思路,官方希望核心指 ...

  5. 如何卸载eclipse中的pydev

    在Eclipse中依次点击菜单"Help"->"About Eclipse". 点击"Installation Details"按钮, ...

  6. 【mybatis】mybatis数据源源码剖析(JNDI、POOLED、UNPOOLED)

    一.概述 二.创建 mybatis数据源的创建过程稍微有些曲折. 1. 数据源的创建过程: 2. mybatis支持哪些数据源,也就是dataSource标签的type属性可以写哪些合法的参数? 弄清 ...

  7. C指针复制字符串从一个数组到另一个数组

    #include <stdio.h> void  copyString (char  *to, char  *from) {      while ( *from ) // from指针遇 ...

  8. CF550 DIV3

    A - Diverse Strings CodeForces - 1144A A string is called diverse if it contains consecutive (adjace ...

  9. Beego:原生方式使用MySQL

    示例: package controllers import ( "database/sql" "fmt" "github.com/astaxie/b ...

  10. Restful API(转)

    原文链接 http://www.ruanyifeng.com/blog/2014/05/restful_api.html 一.协议 API与用户的通信协议,总是使用HTTPs协议. 二.域名 应该尽量 ...