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. .net在Controller里的方法添加[HttpGet]和[HttpPost]

    前端用post过来,Controller就要用[HttpPost],前端用get,Controller就要用[HttpGet],或者不管前端用什么,Controller都不加这些. 前端用post $ ...

  2. 初学android:四大组件之contentprovider

    一.ContentProvider的概念ContentProvider:为存储和获取数据提供统一的接口.可以在不同的应用程序之间共享数据.Android已经为常见的一些数据提供了默认的ContentP ...

  3. apache ambari web页面无法访问解决办法

    ambari-server启动成功,但是页面无法访问 作者:Bo liang链接:http://www.zhihu.com/question/34405898/answer/115001510来源:知 ...

  4. sql 更新重复数据只取一条记录

    select s.*  from (     select *, row_number() over (partition by PersonnelAccount order BY Personnel ...

  5. ###《Video Event Detection by Inferring Temporal Instance Lables》

    论文作者:Kuan-Ting Lai, Felix X. Yu, Ming-Syan Chen and Shih-Fu Chang. #@author: gr #@date: 2014-01-25 # ...

  6. JavaScript中的apply与call与arguments对象

    (一) call方法 语法:presentObj.call(thisObj,arg1,arg2,arg3...) 参数thisObj :将被用作当前对象presentObj的对象. 当thisObj无 ...

  7. DOM4j--write

    import java.io.File; import java.io.FileNotFoundException;import java.io.FileOutputStream;import jav ...

  8. Android基础之Activity

    一.什么是Activity Activity是Android四大组件之一,并且Activity是组件中的重中之重. Activity是为用户提供一个用于信息交互的窗口. 二.如何去创建Activity ...

  9. CSU-ACM2016暑假集训训练2-DFS(C - Network Saboteur)

    C - Network Saboteur Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu ...

  10. N个数随机相加得出固定值的排列组合

    static double[] iArr = new double[10] { 1,2,3,4,5,6,7,8,9,10 }; static Stack<double> stack = n ...