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-12-23 13:22:25

Unity里延迟执行的方法的相关文章

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

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

ios的延迟执行的方法

1.最直接的方法performSelector:withObject:afterDelay: 这种方法的缺点:每次要为延时写一个方法 2.使用类别,用BOLCK执行 01 @implementation NSObject (PerformBlockAfterDelay) 02 03 - (void)performBlock:(void (^)(void))block 04 afterDelay:(NSTimeInterval)delay 05 { 06 block = [[block copy]

iOS 设置 延迟执行 与 取消延迟执行 方法 以及对 run loop 初步认识

之前开发过程中经常会有需求会使用 NSObject中的"performSelector:withObject:afterDelay:"做方法延迟执行的处理, 但是 还没有什么地方需要实现 取消 这个延迟执行方法"cancelPreviousPerformRequestsWithTarget:".(具体可参见系统库文件 NSOject里面两个方法的声明). 但是 我们应该知道在什么条件下,合理使用 延迟 与 取消延迟. 延迟 和 取消延迟 应该 在同一个 事件处理循环

IOS中延迟执行的几种方法

前几天去国美在线面试,就遇到了上面的问题,当时是笔试,只写出来了第一种方法,现在整理了一下. //1.performSelector方法:在当前线程中执行的方法,使用默认模式,并延迟执行@selector方法. [self performSelector:@selector(runDelayMethod) withObject:nil afterDelay:2.0]; //取消之前注册的performSelector:withObject:afterDelay:这个方法 //[NSObject

线程延迟执行

//touchesEnded全屏点击的一个方法 -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { //    //这个相当于睡眠的作用 会卡死主线程 主线程内所有东西都会睡三秒 所以我们不适用 //    [NSThread sleepForTimeInterval:3];     NSLog(@"下载图片------");     //把一张图片延迟三秒后执行 在下面add:方法里已经有了  所有只需要

nodejs延迟执行

setImmediate方法和process.nextTick()方法都是延迟执行的方法,先来看下面一个例子,来区别两者的区别. process.nextTick(function(args){ console.log("nextTick延迟执行!"); }); setImmediate(function(args){ console.log("setImmediate延迟执行!"); }); console.log("正常执行!"); //正常

iOS 代码延迟执行

1. [NSTread sleepForTimeInterval:0.8f] 这个方法 实际效果 好比打断点 等你再恢复断点执行 2.  [self performSelector:@selector(fun:) withObject:nil afterDelay:0.8f]; 这个 就适合UI层级的 异步方式  延迟执行  比较好  还有延迟执行的方法 "fun" 按需求来 当前笔记待补充

Unity里脚本的执行顺序

Unity里的每个脚本里,都有Unity自带的一些事件, 比如:Awake(),Start(),Update()等...执行顺序也是从上至下的. 但是,在某些情况下, A脚本要在Awake()里调用B脚本里Awake()里初始化的值,但是又不清楚到底是A脚本的Awake()先运行,还是B脚本的Awake()先运行 或者是运行后,发现是A脚本先运行,就报错空指针了.这时候,可以调整一下脚本的执行顺序. 在Unity里的Edit-->Project Setting-->Script Executi

[ios]ios的延迟执行方法

1.最直接的方法performSelector:withObject:afterDelay: 这种方法的缺点:每次要为延时写一个方法 2.使用类别,用BOLCK执行 [代码]c#/cpp/oc代码: 01 @implementation NSObject (PerformBlockAfterDelay) 02   03 - (void)performBlock:(void (^)(void))block 04           afterDelay:(NSTimeInterval)delay