这个东西是我在16年的时候记录在新浪博客上的,后来弃用新浪了。原因很简单,新浪编辑器界面格式我不喜欢。哈哈。。下面说下,项目中,我们经常会遇到一些要求延迟一两秒后执行某个函数的需求。通常MonoBehaviour提供的Invoke方法可以满足大部分需求,但是缺陷就是不能给含有参数的函数传参。而且如果逻辑很多的脚本中有十多个延迟函数的需求,我们要写十多个函数来被调用,显得脚本很臃肿。所以,这就需要我们自己去重写封装了。下面就记录下我们可以用的几种延迟方法。
一.利用协程
unity支持协程,并且提供了yield return new WaitForSeconds( t )这个Api,很方便我们去设置时间延迟。所以代码如下:
public static IEnumerator DelayFuc(Action action,float delaySeconds) { yield return new WaitForSeconds (delaySeconds); action (); }
我们将上述方法写入到一个静态工具类里供我们全局调用。调用代码如下:
StartCoroutine (Globle.DelayFuc(()=>{//do something;},delaySeconds));我们可以在拉姆达表达式内随意添加我们要添加的事件,而且代码整体不臃肿,结构紧凑。非常方便。
二.Invoke
MonoBehaviour给我们提供了两个静态延迟方法。Invoke和InvokeRepeating.
第一个参数MethodName:被调用的方法名字 time:time秒后被调用 public method Invoke(methodName: string, time: float): void;
methodName:方法名 time:方法在time秒后被调用 repeatRate: 被调用后每隔repeatRate秒的频率循环调用 public method InvokeRepeating(methodName: string, time: float, repeatRate: float): void;
三.线程
其实第三种方法和第一种方法差不多,开一个线程在里面做计时功能。达到设定值改变一个设定的Bool值,然后在Update里写一个判断,有点麻烦,而且线程里不支持调用unity组件相关的API,所以不是很推荐。
以上就是我对于延迟函数的总结,希望对你有帮助!