• 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; } } }

    原文链接

     

  • 相关阅读:
    avuex
    vue与avuex
    前端上班第十天
    echarts使用心得
    json转化技巧
    前端上班第一天
    声明函数的提升,声明变量与声明函数之间的区别有什么
    王屋山黑加仑
    微信小程序1
    js-基础
  • 原文地址:https://www.cnblogs.com/code1992/p/3635141.html
Copyright © 2020-2023  润新知