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

<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()

{ StartCoroutine(DelayToInvoke.DelayToInvokeDo(() => { Application.LoadLevel(“Option”); },
0.1f));}


看到了吧

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

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

原文地址:http://www.myext.cn/other/a_25720.html

Unity 延迟执行一段代码的较为优雅的方式的更多相关文章

  1. [转]Unity 延迟执行一段代码的较为优雅的方式

    Unity中,延时执行一段代码或者一个方法或者几个方法的情况非常普遍. 一般会用到Invoke和InvokeRepeating方法.顾名思义,第一个是执行一次,第二个是重复执行. 看下定义: void ...

  2. 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码

    2013-9-15 1.    CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在ASP ...

  3. springboot项目启动成功后执行一段代码的两种方式

    springboot项目启动成功后执行一段代码的两种方式 实现ApplicationRunner接口 package com.lnjecit.lifecycle; import org.springf ...

  4. springboot工程启动即执行一段代码

    最近在做一个项目, 需要Tomcat启动后就执行一段代码 在这里需要用到CommandLineRunner这个接口, Spring boot的CommandLineRunner接口主要用于实现在应用初 ...

  5. JS流程控制语句 反反复复(while循环) 和for循环有相同功能的还有while循环, while循环重复执行一段代码,直到某个条件不再满足。

    反反复复(while循环) 和for循环有相同功能的还有while循环, while循环重复执行一段代码,直到某个条件不再满足. while语句结构: while(判断条件) { 循环语句 } 使用w ...

  6. C#实现不影响当前线程情况下间隔一定的时间执行一段代码

    大家知道C#间隔一定时间去执行一段代码,常用的有 1. Thread.Sleep(多少毫秒); 2. 使用Timer控件间隔一定的时间,设置执行一次 以上两种方法,实现起来不难,弊端在于会阻塞当前线程 ...

  7. java 每间隔一段时间执行一段代码

    Java中java.util.Timer类中有若干个schedule的重载方法,其中 void schedule(TimerTask task, long delay, long period ) 安 ...

  8. unity, 延迟执行代码

    使用协程实现比较方便,可以带参数. void Start(){ StartCoroutine(delayLaunchRocket(rocket,2.0f)); } IEnumerator delayL ...

  9. 设计main函数退出后继续执行一段代码

    原理: 使用 _onexit() 函数注册一个函数,这个函数会在main函数退出后执行 使用原则: 1.包含在cstdlib中,是c语言中的库函数: 2.需要注册的函数格式为:int类型返回值.无参数 ...

随机推荐

  1. 如何持续集成/交付一个开源.NET函数库到Nuget.org

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:这是一个简单的入门向导,涉及到GitHub.AppVeyor和Nuget.org. 最 ...

  2. CodeForces 520B Two Buttons(用BFS)

     Two Buttons time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  3. spring异常-aoperror at :0 formal unbound in pointcut

    八月 17, 2016 10:15:21 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRe ...

  4. JAVA反编工具件安装 JD-eclipse

    想看Android  API源码,但是只有class文件,于是找了个反编译工具Java Decompiler,免费的反编译工具.eclipse插件:JD-eclipse. 安装步骤: 1.确保计算机上 ...

  5. GridView的七种数据绑定列的类型

    1.BoundField 用于显示普通文本,是默认的数据绑定列的类型,一般自动生成的列就是该类型,需要注意是DataFormatString属性,该属性可以设置显示的格式,常见格式有:{0:C} 设置 ...

  6. ZeroMQ接口函数之 :zmq_msg_init_data - 从一个指定的存储空间中初始化一个ZMQ消息对象的数据

    ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_msg_init_data zmq_msg_init_data(3) ØMQ Manual - ØMQ/3.2.5 ...

  7. 开源的一些GIS项目下载

    worldwind svn地址: https://nasa-exp.svn.sourceforge.net/svnroot/nasa-exp/trunk/WorldWind dotspatial sv ...

  8. Tickets——H

    H. Tickets Jesus, what a great movie! Thousands of people are rushing to the cinema. However, this i ...

  9. 李洪强iOS经典面试题147-WebView与JS交互

    李洪强iOS经典面试题147-WebView与JS交互   WebView与JS交互 iOS中调用HTML 1. 加载网页 NSURL *url = [[NSBundle mainBundle] UR ...

  10. vs 调试的时候 使用IP地址,局域网的设备可以访问并调试

    由于项目中主要是用于微信端的访问,所以使用PC来调试就很麻烦,那么就想到用IP地址来调试,那么就手机或者移动端就可以访问,并且进行调试了 那么,主要的设置如下几步: 1. 首先保证你的项目的属性的服务 ...