zoukankan      html  css  js  c++  java
  • Unity3D 协程 Coroutine

    协程(Coroutine)的概念存在于很多编程语言,例如Lua、ruby等。而由于Unity3D是单线程的,因此它同样实现了协程机制来实现一些类似于多线程的功能,但是要明确一点协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。

    协程类型IEnumerator 在内部方法使用 yield return 语句,直观的说语句说在位置便是协程暂停,并且将控制权移交给Unity引擎以及之后继续执行余下逻辑的地方。

    例如 IEnumerator Method(){

      int i=0;

      while(i++<10000){

        yield return null; (如果没有这个,主程中将执行1w次后才返回update,如果开启这个则每一帧执行一次)

        }

      yield return null;

    }

    协程开启函数StartCoroutine(IEnumerator routine)(重载 StartCoroutine(string methodName,object value=null)任何类型都派生自Object,value有一个null因此可以直接StartCoroutine(string methodName));

    协程停止函数 StopCoroutine(IEnumerator routine)类似Start。需要注意的是,StopCoroutine方法只能用来停止同一脚本内传入string类型相同的协程,并且StartCoroutine方法只能用string传入才能被Stop。

    使用协程实现延时效果:

    WaitForSeconds(float waitTime):能够延迟waitTime时间;

    WaitForFixedUpdate:暂停协程直到下一个FixedUpdate时才会继续执行;

    WaitForEndOfFrame:暂停协程至直到这一帧结束和所有相机和GUI被渲染;

    WaitUntil(delegate bool):暂停协程直到委托类型函数返回一个true;

    WaitWhile(delegate bool):暂停协程直到委托类型函数返回一个false。

  • 相关阅读:
    Extjs4单选按钮
    下拉框comboxBox本地数据源示例
    处理您的请求时发生异常。此外,对第一个异常执行自定义错误页时发生另一异常。已终止请
    hoj1568
    hoj3434
    poj2924
    poj2909
    hoj3433
    理解Python闭包,这应该是最好的例子
    Spring 学习笔记
  • 原文地址:https://www.cnblogs.com/dlvguo/p/9691635.html
Copyright © 2011-2022 走看看