Unity3D开发之延迟函数

    这个东西是我在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,所以不是很推荐。

以上就是我对于延迟函数的总结,希望对你有帮助!

你可能感兴趣的:(Unity)