【Unity3D自学记录】 Unity 延迟执行一段代码的较为优雅的方式
来源:互联网 发布:linux ssh配置企业应用 编辑:程序博客网 时间:2024/05/29 19:11
在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,随便搞。
- 【Unity3D自学记录】 Unity 延迟执行一段代码的较为优雅的方式
- Unity延迟执行一段代码的较为优雅的方式
- Unity 延迟执行一段代码的较为优雅的方式
- Unity 延迟执行一段代码的实现比较好的方式
- Unity 延迟执行一段代码的实现比较好的方式
- 【unity3d学习】unity延迟执行代码的快捷方式
- 【Unity3D自学记录】解析XML的几种方式
- 较为准确的延迟函数
- iOS 延迟执行的方式
- 【Unity3D自学记录】那些不易注意到的UNITY实用小功能
- 一段较为完整的ajax js
- 【Unity3D自学记录】AssetBundles的使用
- 【Unity3D自学记录】重要的函数
- 【Unity3D自学记录】组合键的使用
- 【Unity3D自学记录】进击的Shader
- [讨论][探索]优雅的并发执行代码.
- 【Unity3D自学记录】Unity3D去掉exe版本的边框
- Unity3D每隔几秒就重复执行一段代码
- node 服务器端启动
- C++ vector一边遍历一边删除元素
- 2014年新一轮的牛市路线图
- linux驱动学习(五) char dev总结
- ffmpeg开发详解
- 【Unity3D自学记录】 Unity 延迟执行一段代码的较为优雅的方式
- PHP中用var_export和serialize做数组缓存的性能测试
- USACO 1.3. Prime Cryptarithm 牛式
- [DP] Party at Hali-Bula
- Qt学习之路-简易画板2(自由涂鸦)
- spring Mvc 教程框架实例以及系统演示下载
- c++中const的用法
- draw primitives
- learning opencv 3-1,3-2 , 3-5,3-6,3-7