unity3d实现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;
        }
    }
}

 

未经允许不得转载:第一Unity3D » unity3d实现MonoBehaviour.StartCoroutine 开始协同程序的示例

赞 (1)