zoukankan      html  css  js  c++  java
  • Unity 延迟执行一段代码的实现比较好的方式

    欢迎来到unity学习unity培训、unity企业培训教育专区,这里有很多U3D资源U3D培训视频U3D教程U3D常见问题U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌。

    在Unity中,延时执行一段代码或者一个方法或者几个方法的情况非常普遍。

    一般会用到Invoke和InvokeRepeating方法。顾名思义,第一个是执行一次,第二个是重复执行。

    看下定义:

    void Invoke(string methodName, float time);
     

    第一个参数是方法名(注意是字符串形式),并不是更方便的委托。第二个是延时多少秒。只执行一次。

    void InvokeRepeating(string methodName, float time, float repeatRate);
     

    InvokeRepeating第二个参数是延时多少秒后开始,第三个参数是每次执行间隔的秒数。


    你有没有发现这两个方法有个弊端,就是必须输入方法名!也就是我说,如果我想延时执行某段代码,必须把代码放在某个方法里,然后使用这Invoke或者InvokeRepeating方法来执行。

    这样对于上下文变量、属性的引用就会尤为不便,而且不能传参数!!!尼玛,要他还有何用?

     

    我猜你一定用过这样的方法。没错,“协同”,听起来还挺高大上的名字啊。

    用StartCoroutine来执行一个以IEnumerator为返回值的方法,通常用于异步下载啊,等比较耗时又不能让游戏卡死的情况。

    还有一个好的类WaitForSeconds,对,它就一个构造函数,用来延时的(延时………………比万艾可好用?比希爱力好用?)。

    好了不废话了,以下是我自用的延时方法,放在一个类里以静态方法存在。可以在任何时候任何地方延时指定秒数的代码。

    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,则


    void OnClick()
    {
    StartCoroutine(DelayToInvoke.DelayToInvokeDo(() =>
    {
    Application.LoadLevel(“Option”);
    }, 0.1f));
    }
    看到了吧

    Application.LoadLevel(“Option”);就是想要延时执行的代码段。

    你可以写很长很长。Action,随便搞。

    更多精彩请点击 http://www.gopedu.com/

  • 相关阅读:
    最近这段时间我,想在2008 的基础上,写2011 有的工具 不知道会样,这次又机会研究ploy
    Screen 可以查找屏幕pos系类的函数
    笔记1
    Ubuntu下如何安装 tar.bz2 文件
    安装ubuntu遇到“BusyBox”问题
    android luancher 如何添加快捷方式
    转 Android 源代码结构
    修改apk图标
    Linux Ubuntu 下如何安装 .SH文件
    解放你的电源键!!不用刷机不用装软件!超简单修改搜索锁屏、HOME键唤醒~~~~~
  • 原文地址:https://www.cnblogs.com/Unity3Dqishituan/p/4048672.html
Copyright © 2011-2022 走看看