function StartCoroutine (routine : IEnumerator) : Coroutine

  描述:开始协同程序。

  一个协同程序在执行过程中,可以在任意位置使用yield语句。yield的返回值控制何时恢复协同程序向下执行。协同程序在对象自有帧执行过程中堪称优秀。协同程序在性能上没有更多的开销。StartCoroutine函数是立刻返回的,但是yield可以延迟结果。直到协同程序执行完毕。

  用javascript不需要添加StartCoroutine,编译器将会替你完成.但是在C#下,你必须调用StartCoroutine。

  

// 此例演示如何调用协同程序和它的执行

using UnityEngine;
using System.Collections; public class example : MonoBehaviour
{
  void Start()
{
  // 先打印"Starting 0.0"和"Before WaitAndPrint Finishes 0.0"两句,2秒后打印"WaitAndPrint 2.0"
  print("Starting " + Time.time);
  // 协同程序WaitAndPrint在Start函数内执行,可以视同于它与Start函数同步执行.
  StartCoroutine(WaitAndPrint(2.0F));
  print("Before WaitAndPrint Finishes " + Time.time);
}
IEnumerator WaitAndPrint(float waitTime)
  {
  // 暂停执行waitTime秒
    yield return new WaitForSeconds(waitTime);
    print("WaitAndPrint " + Time.time);
}
}   // - After 0 seconds, prints "Starting 0.0"
  // - After 0 seconds, prints "Before WaitAndPrint Finishes 0.0"
  // - After 2 seconds, prints "WaitAndPrint 2.0"

  另一个例子:

// 在这个例子中我们演示如何调用协同程序并直到它执行完成.

using UnityEngine;
using System.Collections; public class example : MonoBehaviour
{
IEnumerator Start()
  {
    // 0秒时打印"Starting 0.0",2秒后打印"WaitAndPrint 2.0"和"Done 2.0"
  print("Starting " + Time.time);
    // 运行WaitAndPrint直到完成
yield return StartCoroutine(WaitAndPrint(2.0F));
print("Done " + Time.time);
}
  IEnumerator WaitAndPrint(float waitTime)
  {
    // 等待waitTime秒
yield return new WaitForSeconds(waitTime);
print("WaitAndPrint " + Time.time);
  }
} // - After 0 seconds, prints "Starting 0.0"
// - After 2 seconds, prints "WaitAndPrint 2.0"
// - After 2 seconds, prints "Done 2.0"

  • function StartCoroutine (methodName : string, value : object = null) : Coroutine

  描述: 开始一个叫methodName的协同程序.

  很多情况下,我们会用到StartCoroutine的一个变体。使用有字符串方法名的StartCoroutine允许你用StopCoroutine去停止它。其缺点就是会有较高的性能开销,而且你只能传递一个参数。

// 这个例子演示如何调用一个使用字符串名称的协同程序并停掉它

using UnityEngine;
using System.Collections; public class example : MonoBehaviour
{
IEnumerator Start()
  {
StartCoroutine("DoSomething", 2.0F);
yield return new WaitForSeconds();
StopCoroutine("DoSomething");
}
IEnumerator DoSomething(float someParameter)
  {
while (true)
     {
print("DoSomething Loop");
       // 停止协同程序的执行并返回到主循环直到下一帧.
yield return null;
}
}
}

原文链接

9. MonoBehaviour.StartCoroutine 开始协同程序的更多相关文章

  1. MonoBehaviour.StartCoroutine开启协同程序

    StartCoroutine协同程序 StartCoroutine(IEnumerator) StartCoroutine(string methodName) StartCoroutine(stri ...

  2. Unity3D协同程序(Coroutine)

    摘要下: 1. coroutine, 中文翻译"协程".这个概念可能有点冷门,不过百度之,说是一种很古老的编程模型了,以前的操作系统里进程调度里用到过,现在操作系统的进程调度都是根 ...

  3. Coroutine协同程序介绍(Unity3D开发之三)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=496 Coroutine在Uni ...

  4. (转)Unity3D协同程序(Coroutine)

    一.什么是协同程序 协同程序,即在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行.换句话说,开启协同程序就是开启一个线程. 二.协同程序的开启与终止 在Unity3D中,使用MonoBeha ...

  5. 【转】Unity中的协同程序-使用Promise进行封装(三)

    原文:http://gad.qq.com/program/translateview/7170967 译者:崔国军(飞扬971)    审校:王磊(未来的未来) 在这个系列的最后一部分文章,我们要通过 ...

  6. 【转】关于Unity协同程序(Coroutine)的全面解析

    http://www.unity.5helpyou.com/2658.html 本篇文章我们学习下unity3d中协程Coroutine的的原理及使用 1.什么是协调程序 unity协程是一个能暂停执 ...

  7. 【转】Unity中的协同程序-使用Promise进行封装(二)

    原文:http://gad.qq.com/program/translateview/7170970 译者:王磊(未来的未来)    审校:崔国军(飞扬971)   在上一篇文章中,我们的注意力主要是 ...

  8. 【转】Unity中的协同程序-使用Promise进行封装(一)

    原文:http://gad.qq.com/program/translateview/7170767 译者:陈敬凤(nunu)    审校:王磊(未来的未来) 每个Unity的开发者应该都对协同程序非 ...

  9. Unity 中的协同程序

    今天咱就说说,协同程序coroutine.(这文章是在网吧敲的,没有unity,但是所有结论都被跑过,不管你信得过我还是信不过我,都要自己跑一下看看,同时欢迎纠错)先说说啥是协程:协同程序是一个非常让 ...

随机推荐

  1. Microsoft JScript 运行时错误: Sys.WebForms.PageRequestManagerParserErrorException无法分析从服务器收到的消息。之所以出现此错误,

    Microsoft JScript 运行时错误: Sys.WebForms.PageRequestManagerParserErrorException: 无法分析从服务器收到的消息.之所以出现此错误 ...

  2. 通过GitHub部署网站到Azure WebSite

    一.将代码上传到GitHub存储库中 第一步:创建Github新账户 第二步:新建仓库 第三步:安装Github shell程序,地址:http://windows.github.com/ 第四步:打 ...

  3. Android——将图片加入到系统相册里面

    Adnroid中保存图片的方法可能有如下两种: 第一种是自己写方法,如下代码: public static File saveImage(Bitmap bmp) { File appDir = new ...

  4. C#当中的泛型和java中的对比

    1.C#中的泛型 先写一个Demo: namespace generic {         public class Program         {                 static ...

  5. ASP.NET Web API——选择Web API还是WCF

    WCF是.NET平台服务开发的一站式框架,那么为什么还要有ASP.NET Web API呢?简单来说,ASP.NET Web API的设计和构建只考虑了一件事情,那就是HTTP,而WCF的设计主要是考 ...

  6. 函数-头文件//Calculator.h

    // // Calculator.h // 函数-头文件 // // Created by zhangxueming on 15/6/2. // Copyright (c) 2015年 zhangxu ...

  7. GroupBox 重绘圆角边框和文字

    private void GroupBox_Paint(object sender, PaintEventArgs e) { if (sender != null && sender ...

  8. 服务控件与html标签的一点

    前言 很久没有用服务器控件开发了,在新公司待了三四个月了,这个公司一直都用服务器控件.所以在开发的过程中也发现了一丢丢的东东,也许以前就知道,只是没有认真的发现. 过程 前几天在开发页面的时候,有个需 ...

  9. sae-php调试代码,不输出页面

    如果单单使用sae_debug,页面就会输出SAE_DEBUG的信息,所以造成很多问题,例如回复微信服务器的xml,但是不知道就想着调试,结果... 所以怎么解决让调试信息不输出页面呢 看完手册,才知 ...

  10. [CSS]white-space 属性详解

    实例 规定段落中的文本不进行换行: p { white-space: nowrap } 可能的值 值 描述 normal 默认.空白会被浏览器忽略. pre 空白会被浏览器保留.其行为方式类似 HTM ...