StartCoroutine/StopCoroutineInvoke

using UnityEngine;
using System.Collections;

public class CoroutineTest : MonoBehaviour {

    void Start () {
        print("Starting " + Time.time);
        StartCoroutine(WaitAndPrint(0.2F));
        print("Before WaitAndPrint Finishes " + Time.time);
    }

    IEnumerator WaitAndPrint(float waitTime) {
        print("StartCoroutine1 " + Time.time);
        StartCoroutine("DoSomething", 2.0f);
        print("StartCoroutine2 " + Time.time);
        yield return new WaitForSeconds(waitTime);
        print("StopCoroutine1 " + Time.time);
        StopCoroutine("DoSomething");
        print("StopCoroutine2 " + Time.time);
    }

    IEnumerator DoSomething(float someParameter) {
        while (true) {
            print("DoSomething Loop");
            yield return null;
        }
    }

    void Projectile() {
        print("Projectile " + Time.time);
    }

    void LaunchProjectile() {
        print("LaunchProjectile " + Time.time);
    }

    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown(KeyCode.Space) && !IsInvoking("LaunchProjectile")) {
            InvokeRepeating("LaunchProjectile", 2f, 0.5f);
            Invoke("Projectile", 2f);
        }
        if (Input.GetKeyDown(KeyCode.X)) {
            Debug.Log("CancelInvoke");
            CancelInvoke("LaunchProjectile");
        }
    }
}
#region Assembly UnityEngine.dll, v0.0.0.0
// D:\Program\Unity Project\test\Library\UnityAssemblies\UnityEngine.dll
#endregion

using System;
using System.Collections;
using UnityEngine.Internal;
using UnityEngine.Scripting;

namespace UnityEngine {
    // Summary:
    //     MonoBehaviour is the base class every script derives from.
    [RequiredByNativeCode]
    public class MonoBehaviour : Behaviour {
        [WrapperlessIcall]
        public MonoBehaviour();

        // Summary:
        //     Disabling this lets you skip the GUI layout phase.
        public bool useGUILayout { get; set; }

        // Summary:
        //     Cancels all Invoke calls on this MonoBehaviour.
        public void CancelInvoke();
        //
        // Summary:
        //     Cancels all Invoke calls with name methodName on this behaviour.
        //
        // Parameters:
        //   methodName:
        [WrapperlessIcall]
        public void CancelInvoke(string methodName);
        //
        // Summary:
        //     Invokes the method methodName in time seconds.
        //
        // Parameters:
        //   methodName:
        //
        //   time:
        [WrapperlessIcall]
        public void Invoke(string methodName, float time);
        //
        // Summary:
        //     Invokes the method methodName in time seconds, then repeatedly every repeatRate
        //     seconds.
        //
        // Parameters:
        //   methodName:
        //
        //   time:
        //
        //   repeatRate:
        [WrapperlessIcall]
        public void InvokeRepeating(string methodName, float time, float repeatRate);
        //
        // Summary:
        //     Is any invoke pending on this MonoBehaviour?
        public bool IsInvoking();
        //
        // Summary:
        //     Is any invoke on methodName pending?
        //
        // Parameters:
        //   methodName:
        [WrapperlessIcall]
        public bool IsInvoking(string methodName);
        //
        // Summary:
        //     Logs message to the Unity Console (identical to Debug.Log).
        //
        // Parameters:
        //   message:
        public static void print(object message);
        //
        // Summary:
        //     Starts a coroutine.
        //
        // Parameters:
        //   routine:
        public Coroutine StartCoroutine(IEnumerator routine);
        //
        // Summary:
        //     Starts a coroutine named methodName.
        //
        // Parameters:
        //   methodName:
        //
        //   value:
        [ExcludeFromDocs]
        public Coroutine StartCoroutine(string methodName);
        //
        // Summary:
        //     Starts a coroutine named methodName.
        //
        // Parameters:
        //   methodName:
        //
        //   value:
        [WrapperlessIcall]
        public Coroutine StartCoroutine(string methodName, object value);
        [WrapperlessIcall]
        public Coroutine StartCoroutine_Auto(IEnumerator routine);
        //
        // Summary:
        //     Stops all coroutines running on this behaviour.
        [WrapperlessIcall]
        public void StopAllCoroutines();
        public void StopCoroutine(Coroutine routine);
        //
        // Summary:
        //     Stops the first coroutine named methodName, or the coroutine stored in routine
        //     running on this behaviour.
        //
        // Parameters:
        //   methodName:
        //     Name of coroutine.
        //
        //   routine:
        //     Name of the function in code.
        public void StopCoroutine(IEnumerator routine);
        //
        // Summary:
        //     Stops the first coroutine named methodName, or the coroutine stored in routine
        //     running on this behaviour.
        //
        // Parameters:
        //   methodName:
        //     Name of coroutine.
        //
        //   routine:
        //     Name of the function in code.
        [WrapperlessIcall]
        public void StopCoroutine(string methodName);
    }
}
  • yield; The coroutine will continue after all Update functions have been called on the next frame.
    yield:协程在所有的Update函数于下一帧调用后继续执行。

  • yield WaitForSeconds(2); Continue after a specified time delay, after all Update functions have been called for the frame
    yield WaitForSeconds(2):在一个指定的时间延迟后继续执行,在所有的Update函数被调用之后。
  • yield WaitForFixedUpdate(); Continue after all FixedUpdate has been called on all scripts
    yield WaitForFixedUpdate():在所有脚本上所有的FixedUpdate被调用之后继续执行。
  • yield WWW Continue after a WWW download has completed.
    yield WWW:在WWW加载完成之后继续执行。
  • yield StartCoroutine(MyFunc); Chains the coroutine, and will wait for the MyFunc coroutine to complete first.
    yield StartCoroutine(MyFunc):用于链接协程,此将等待MyFunc协程完成先

yield  WaitForEndOfFrame();  用于本帧渲染完

yield return new WaitForEndOfFrame(); // 本帧渲染完后

时间: 2024-11-03 21:52:23

StartCoroutine/StopCoroutineInvoke的相关文章

关于StartCoroutine的简单线程使用

StartCoroutine在unity3d的帮助中叫做协程,意思就是启动一个辅助的线程. 在C#中直接有Thread这个线程,但是在unity中有些元素是不能操作的.这个时候可以使用协程来完成. 使用线程的好处就是不会出现界面卡死的情况,如果有一次非常大量的运算,没用线程就会出现假死的情况. 下面通过一个简单的例子来说明使用协程的好处: [csharp] view plaincopy void OnGUI() { GUI.Label(new Rect(0, 0, 200, 50), "测试1:

Unity StartCoroutine 和 yield return 深入研究

StartCoroutine和yield return表面意思很好理解,StartCoroutine就是开启一个协程,yield return 是迭代器块返回调用迭代的地方. 是吧?不知道你什么感觉,反正我觉得,还是需要深入研究一下的.OK,here we go! 首先,先看一下StartCoroutine在Unity官方的解释. 意思是:一个协程的执行可以在任何地方用yield语句来暂停,yield return的值决定了什么时候协程恢复执行.协程在协调在几帧中执行的操作时有极大的用处.协程几

IEnumerator/ IEnumerable/ yield return/ StartCoroutine 详解

IEnumerator/ IEnumerable public interface IEnumerable { IEnumerator GetEnumerator(); } public interface IEnumerator { bool MoveNext(); void Reset(); Object Current { get; } } 在两者的使用上,有下面几点需要注意 1.一个Collection要支持foreach方式的遍历,必须实现IEnumerable接口(亦即,必须以某种方

StartCoroutine的使用

StartCoroutine在unity3d的帮助中叫做协程,意思就是启动一个辅助的线程. 在C#中直接有Thread这个线程,但是在unity中有些元素是不能操作的.这个时候可以使用协程来完成. 使用线程的好处就是不会出现界面卡死的情况,如果有一次非常大量的运算,没用线程就会出现假死的情况. 下面通过一个简单的例子来说明使用协程的好处: [csharp] view plaincopy void OnGUI() { GUI.Label(new Rect(0, 0, 200, 50), "测试1:

unity 射线检测

unity中射线检测时非常实用也经常实用的一种手段.下面讲解一下射线检测问题. 1)Ray 根据射线端点和射线的方向定义一条射线 Ray ray= new Ray(transform.position, transform.forward); 定义一个包含射线投射信息的变量RaycastHit hit,并进行射线检测Physics.SphereCast RaycastHit hit; if(Physics.SphereCast(ray,1f,out hit)) { if(hit.distance

关于Unity协程(Coroutine)

协程官方doc解释A coroutine is a function that can suspend its execution(yield) until the given given YieldInstruction finishes. StartCoroutine开启协程 先执行协程中的代码 碰到yield return时控制权交给unity引擎 引擎继续做接下来的工作例如第一次yield return之后执行StartCoroutine下一行代码 直到满足yield指令的要求才会重新进

使用Unity3D的50个技巧:Unity3D最佳实践

刚开始学习Unity3D时间不长,在看各种资料.除了官方的手册以外,其他人的经验也是非常有益的.偶尔看到老外这篇文章,觉得还不错,于是翻译过来和大家共享.原文地址:http://devmag.org.za/2012/07/12/50-tips-for-working-with-unity-best-practices/,下面是译文. 欢迎转载,请注明出处:燕良@游戏开发.另外,欢迎各路高手加入我的QQ群:264656505,切磋交流技术. 关于这些技巧 这些技巧不可能适用于每个项目. 这些是基于

如何使用Assetsbundle打包,下载,加载

Directory 类   在system.io空间下,负责目录的管理和创建.Exists判断是否有该目录.原文地址:http://blog.csdn.net/cuiyh1993/article/details/52245337 打包:打包的功能一定要放在Editor文件夹下,不然编译过程会出错.Editor文件夹下的脚本不能进行挂载.using UnityEngine;  using System.Collections;  using System.IO;  using System.Col

【Unity笔记】协程Coroutine的简单优化

一个最简单的协程,也至少需要2帧才能完成.第一帧走到yield return null停止,第二帧从此处接着执行完下面的操作.需求:如果缓存中存在某数据则直接使用,否则联网异步下载. private bool cached; // 该数据是否已有缓存 void Start(){ StartCoroutine(Download()); } IEnumerator WorkWhenDownload() { if(cached){ // 直接使用缓存 }else{ // 没有缓存,联网下载 WWW w