在Unity中,延时执行一段代码或者一个方法或者几个方法的状况很是广泛。html
通常会用到Invoke和InvokeRepeating方法。顾名思义,第一个是执行一次,第二个是重复执行。异步
看下定义:函数
void Invoke(string methodName, float time);
第一个参数是方法名(注意是字符串形式),并非更方便的委托。第二个是延时多少秒。只执行一次。spa
void InvokeRepeating(string methodName, float time, float repeatRate);
InvokeRepeating第二个参数是延时多少秒后开始,第三个参数是每次执行间隔的秒数。code
你有没有发现这两个方法有个弊端,就是必须输入方法名!也就是我说,若是我想延时执行某段代码,必须把代码放在某个方法里,而后使用这Invoke或者InvokeRepeating方法来执行。htm
这样对于上下文变量、属性的引用就会尤其不便,并且不能传参数!!!尼玛,要他还有何用?游戏
我猜你必定用过这样的方法。没错,“协同”,听起来还挺高大上的名字啊。字符串
用StartCoroutine来执行一个以IEnumerator为返回值的方法,一般用于异步下载啊,等比较耗时又不能让游戏卡死的状况。get
还有一个好的类WaitForSeconds,对,它就一个构造函数,用来延时的(延时………………比万艾可好用?比希爱力好用?)。string
好了不废话了,如下是我自用的延时方法,放在一个类里以静态方法存在。能够在任什么时候候任何地方延时指定秒数的代码。
using UnityEngine; using System.Collections; using System; public class DelayToInvoke : MonoBehaviour { public static IEnumerator DelayToInvokeDo(Action action, float delaySeconds) { yield return new WaitForSeconds(delaySeconds); action(); } }
如何使用呢?
好比我点击NGUI的一个Button,则
{ StartCoroutine(DelayToInvoke.DelayToInvokeDo(() => { Application.LoadLevel(“Option”); }, 0.1f));}<span style="font-family: 宋体, san-serif; color: rgb(0, 0, 255);"></span><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; font-size: 14px;"><span style="color: rgb(0, 0, 255);">void</span> OnClick()
看到了吧
Application.LoadLevel(“Option”);就是想要延时执行的代码段。
你能够写很长很长。Action,随便搞。