9. MonoBehaviour.StartCoroutine 开始协同程序

  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(1); StopCoroutine("DoSomething"); } IEnumerator DoSomething(float someParameter)
  {
while (true)
     { print(
"DoSomething Loop");        // 停止协同程序的执行并返回到主循环直到下一帧. yield return null; } } }

 

原文链接

 

posted @ 2014-03-31 10:08  quanzhan  阅读(570)  评论(0编辑  收藏  举报