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

在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,随便搞。

时间: 2024-10-05 07:36:48

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

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

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. 在Unity中,延时执行一段代码或者一个方法或者几个方法的情况非常普遍. 一般会用到Invoke和InvokeRepeating方法.顾名思义,第一个是执行一次,第二个是重复执行. 看下定义: void Invoke(string methodName, float time); 第一个参数是方

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

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

每当程序唤醒时,React Native如何执行一段代码?

Andshare怎么onsclassyn?最近,我想做一个类似淘宝的功能,以便每次打开时根据用户剪贴板的内容增加相应的输出.要执行此功能,您需要在每次唤醒程序时阅读剪贴板. 1.监听器: \\ amp;消灭 1个异步组件DidMount() 2 AppState.addEventListener(“更改”,this.handleAppStateChange): 3} 4: 5种成分WillUnmount() 6 AppState.removeEventListener(“更改”,this.han

unity, 延迟执行代码

使用协程实现比较方便,可以带参数. void Start(){ StartCoroutine(delayLaunchRocket(rocket,2.0f)); } IEnumerator delayLaunchRocket(Obj rocket,float delayTime){ yield return new WaitForSeconds (delayTime); rocket.launch(); }

Java基础 case穿透 多个case执行同一段代码

????JDK :OpenJDK-11 ?????OS :CentOS 7.6.1810 ?????IDE :Eclipse 2019?03 ????blog :www.cnblogs.com/jizuiku typesetting :Markdown ? code package per.jizuiku.base; import java.util.Scanner; /** * @author javaer * @date 2019/06/22 */ public class Demo { /

main 主函数执行完毕后,是否可能会再执行一段代码?(转载)

body { font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5; } html, body { } h1 { font-size:1.5em; font-weight:bold; } h2 { font-size:1.4em; font-weight:bold; } h3 { fon

类Exception_A继承Exception,类Exception_B继承Exception_A,请问执行此段代码的输出是什么?

1 @Test 2 public void Test_Exception() { 3 try { 4 throw new ExceptionB("A"); 5 } catch (ExceptionA e) { 6 System.out.println("ExceptionA"); //true 7 } catch (Exception e) { 8 System.out.println("Exception"); //false 9 } /*ca

iOS开发延迟执行一个方法的方法

在实际的开发中,有时候需要延迟一段时间执行某个方法或者某段代码,总结两种延迟执行某段代码的方式: 1. [self performSelector: withObject: afterDelay:]; 延迟执行(SEL)里面的方法,是oc中的一个方法.第一个参数是要执行的方法,第二个参数是执行的方法的参数,可以有一个参数也可以为nil.第三个参数是多长时间后执行该方法,该方法是单线程的. 2. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (in

Unity里延迟执行的方法

在Unity中,延时执行一段代码或者一个方法或者几个方法的情况非常普遍. 一般会用到Invoke和InvokeRepeating方法.顾名思义,第一个是执行一次,第二个是重复执行. 看下定义: void Invoke(string methodName, float time); 第一个参数是方法名(注意是字符串形式),并不是更方便的委托.第二个是延时多少秒.只执行一次. void InvokeRepeating(string methodName, float time, float repe