Unity 延迟执行一段代码的较为优雅的方式

转载 2015年11月21日 11:06:54

在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



相关文章推荐

浅谈Unity3D中的Coroutine及其使用(延时、定时调用函数)

一、Coroutine(协程)的概念和本质 在网上的一些资料当中,一直将Coroutine当作一个线程来描述,这样是不准确的。因为Coroutine并不是一个新的线程,它仍旧是属于主线程的一部分。Co...

unity基础开发----延迟等待执行代码

在unity中很多时候需要用到延迟执行或者等待执行。 //碰撞之后执行等待 WaitAndPrint() Csharp代码   void OnCollisionE...

Unity 延迟执行一段代码的实现比较好的方式

在Unity中,延时执行一段代码或者一个方法或者几个方法的情况非常普遍。 一般会用到Invoke和InvokeRepeating方法。顾名思义,第一个是执行一次,第二个是重复执行。 看下定...
  • rondong
  • rondong
  • 2015年01月26日 00:57
  • 4722

【Unity3D自学记录】 Unity 延迟执行一段代码的较为优雅的方式

在unity中,延时执行一段代码或者一个方法或者几个方法的情况非常普遍。 一般会用到Invoke和InvokeRepeating方法。顾名思义,第一个是执行一次,第二个是重复执行。 看下定...
  • hackdjh
  • hackdjh
  • 2014年12月04日 11:38
  • 4171

转:Unity延时功能的几种实现

转自《Unity3D项目实战笔记(5):延时功能的几种实现》 我所做过的系统,分单机版系统(2005年)、CS系统(2010年)、实时系统(2015年),各个系统均有“延时”功能:定时调度的; 本博...

Unity 函数延迟调用

using UnityEngine; using System.Collections; using System.Collections.Generic; using System;public c...

Unity3d延时执行程序的方法

这里只给出了两种方法,以后继续补充。 【一】协程 例子: void Start()     {         StartCoroutine(PlayerAttack()); ...

Unity - 延时操作方案

背景:做游戏的很多时候我们需要延时操作:倒计时是一个最简单也是最基本的问题。 目标:用 Invoke  和 StartCoroutine 延时做倒计时。 因为此文是实现功能文,具体理论不在...

【源码】计时器,每隔2秒执行一次

using UnityEngine; using System.Collections; public class EnemyAttack : MonoBehaviour {  public floa...

unity中获得一帧中函数执行的时间…

void Start ()     {         float t = Time.time;         TestTime();         UnityEngine.Debug.Log(s...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity 延迟执行一段代码的较为优雅的方式
举报原因:
原因补充:

(最多只允许输入30个字)