Unity 3D - 协同程序

Unity 3D - 协同程序 :

API列表 :

名称 作用
StartCoroutine 启动指定协同程序
StopCoroutine 终止指定协同程序
StopAllCoroutines 终止所有协同程序
WaitForSeconds 等待若干秒
WaitForFixedUpdate 等待知道下一次FixedUpdate调用

说明 :

  • 一般用来在脚本中增加延时效果。因为在Start()或者Update()中是不能直接延时的(WaitForSecond())等待某个操作结束之后再执行代码字符串做为参数

  • 协同程序,简称“协程”. 在脚本运行过程中,需要额外的执行一些其他的代码,这个时候就可以将“其他的代码”以协程的形式来运行 .

  • 类似于开启了一个线程,但是协程不是线程。

开启协同:

  • StartCoroutine(string methodName):字符串作为参数可以开启线程并在协程结束前终止线程;开启协程时最多只能传递一个参数,并且性能消耗会更大一点

  • StartCoroutine(IEnumerator routine):只能等待协程的结束而不能随时终止(除非使用StopAllCoroutines()方法)

中止协同:

  • StopCoroutine(string methodName):中止一个协同,只能终止该MonoBehaviour中的协同程序

  • StopAllCoroutines():中止所有协同,只能终止该MonoBehaviour中的协同程序

yiled:

  • 和协同密切相关的一个概念,一个协同程序在执行过程中,可以在任意位置使用yield语句。yield的返回值控制何时恢复协同程序向下执行。

注意 :

  • 将协同程序所在gameobject的active属性设置为false,当再次设置active为ture时,协同程序并不会再开启。

  • yield不可单独使用 , 需要与return配合使用 , 例如:

    //等0帧
    yield return 0;

    //等待1帧
    yield return 1;

    //等待3秒
    yield return WaitForSeconds(3.0);

    //立即返回调用点
    yield return null;
  • 所有使用yield的函数必须将返回值类型设置为IEnumerator类型,例如:
IEnumerator DoSomething() {
    Debug.Log("do something…");
}

C#实例 :

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestScript : MonoBehaviour {

    void Start () {

        print ("begin");

        StartCoroutine ("Test");
    }

    IEnumerator Test()
    {
        yield return new WaitForSeconds (2);
        print("wait 2 seconds print");
    }
} 

你可能感兴趣的:(Unity3D)