原文:https://www.cnblogs.com/xifarm/p/invoke.html

在Unity3D中,新建的脚本会默认继承MonoBehaviour,其中Update函数会被引擎自动调度,如在我的电脑上,Update函数被调用的周期为0.012s。

那么Unity3D中,仅有通过Update函数来实现延时功能吗?  还有无其他的实现呢?

怎么才能让一个界面只显示1秒之后 然后再执行其他的操作~

比如 游戏的胜利界面 只让他显示一秒 然后执行其他操作

答案是有的,下面就用过的几种延时功能(定时器)一一列出来:

延时功能

是否继承MonoBehaviour

备注

Update函数

配合使用的函数:

Timer.timer

Invoke

配合使用的函数:

CancelInvoke

InvokeRepeating

IsInvoking

Coroutine

配合使用的函数:

StartCoroutine

StopAllCoroutines

StopCoroutine

DOTween (HOTween v2)

VisionTimer.VP_Timer

下面的几个例子,我们在ShowA函数中,延时5s调用ShowB函数,通过代码看看各个实现方法的异同。

为了方便,我仅截取部分关键代码,是否继承MonoBehaviour等自行添加即可。

Update函数 实现定时器

float m_timer = 0;     void Update ()     {         m_timer += Time.time;         if (m_timer >= 5)         {             ShowB();

m_timer = 0;         }

}         private void ShowB()     {

}

Update函数实现定时器,几乎是学习Unity3D必修的功课。 但是,在实战项目中需要维护m_timer这个变量,且从设计角度看,代码写得有些不整齐。

Invoke函数 实现定时器

GameController.Get().CancelInvoke();

GameController.Get().Invoke("ShowB", 5f);

private void ShowB()

{

game.ShowCardInTurn();

}

Invoke是MonoBehaviour提供的函数,可以延时调用函数,且可以通过CancelInvoke控制调度器的停止。 但是,Invoke的调用是在运行时生效的,对于ShowB函数,很容易导致在代码审查阶段被误杀—函数删除后,编译不会报错,你可能会误认为这个函数是废弃的函数。

Coroutine 协成 实现定时器

private IEnumerator ShowA()     {         yield return new WaitForSeconds(5);

ShowB();     }         private void ShowB()     {

}

使用协成的WaitForSeconds可以实现定时器,使用起来比较简单。

DOTween 实现定时器

DOTween动画插件,是在Unity 4.6时代,为了弥补UGUI无动画脚本的先天不足而云起的商业插件,当然雨松MoMO的《UGUI研究院之界面中使用DoTween(七)》对普及DOTWeen功不可没。

private void ShowA()     {         GameObject go;

go.transform.DOMoveZ(0.1f, 5f)             .OnComplete(new TweenCallback(ShowB));     }         private void ShowB()     {

}

DOTween的主要作用不是为了做延时调度用的,但是其带有这个功能,且思想非常酷。

VP_Timer 实现定时器

vp_Timer.Handle Timer = new vp_Timer.Handle();

vp_Timer.In(5, new vp_Timer.Callback(() =>

{

Timer.Cancel();

ShowB();

}), Timer);

VP_Timer是某天下午,在网上搜索中,无意找到了,其简洁的用法,着实让人眼前一亮。 目前项目中,涉及的地方超过10处,极大的方便了延时功能的实现,非常不错。 也为项目节约了大量的时间。

上面的几种方法,在实战Unity3D项目中,均有所涉及,我本人用的比较多的是DOTWeen和VP_Timer,这2个不依赖继承MonoBehaviour,相对比较灵活,且其是商业项目,封装还是挺给力的。

如果大家还有其他实现方法,也欢迎分享,我们共同提高、进步。

dotween unity 延时_unity延时功能的几种实现相关推荐

  1. dotween unity 延时_3D俯视角射击——用Unity还原东方弹幕(上)

    作者:QXYO 前言 之前我们的专栏中介绍过2D的俯视角射击,这次就来试试在3D场景下的实现.移动射击的实现方法差不多,所以本次的主要目标是在3D场景下还原东方的符卡(弹幕)效果. 我们先来看看最终结 ...

  2. Unity实现在线宝箱功能

    Unity实现在线宝箱功能 首先让明确一点OnlineBox其实是一个Button组件. 先实现一个功能是点击宝箱,更换打开成宝箱的图片,并播放对应的音效: /// <summary>// ...

  3. Unity网络多玩家游戏开发教程第1章Unity自带网络功能

    Unity网络多玩家游戏开发教程第1章Unity自带网络功能 Unity拥有大量的第三方插件,专门提供了对网络功能的支持.但是,大部分开发者第一次接触到的还是Unity自带的网络功能,也就是大家经常说 ...

  4. 自定义js 延时函数调用延时函sleep();

    自定义js 延时函数调用延时函sleep(): //调用延时函数 2秒后,程序往下执行: sleep(2000)://自定义js 延时 var t = Date.now(); function sle ...

  5. 深入分析Android中Activity的onStop和onDestroy()回调延时及延时10s的问题

    一.起因 很久以前接手的一个比较老的项目中,是使用Activity的名字作为tag来标识网络请求的.在Activity的onDestroy回调中根据这个标识取消所有的网络请求.但是在部分页面,出现了比 ...

  6. c语言延时时间计算器,RC延时电路延时时间计算

    RC延时电路延时时间计算 计算公式: 延时时间= - R*C*ln((E-V)/E) 其中: "-"是负号; 电阻R和电容C是串联,R的单位为欧姆,C的单位为F; E为串联电阻和电 ...

  7. unity解锁_Unity与PiXYZ软件合作以解锁CAD数据以进行实时开发

    unity解锁 Together, Unity and PiXYZ deliver a solution that makes creating real-time interactive and v ...

  8. Unity webgl 弹窗直播功能

    unity弹窗播放直播功能,Button事件打开弹窗播放实时视频,动态关闭. 实现思路是unity发送消息给打包出来的Html,在网页代码里面弹窗和关闭视频.网页弹出一个layer层, 层里面内嵌一个 ...

  9. Unity 3D 实现拾取物品功能(一)

    Unity 3D 实现拾取物品功能(一) 刚刚接触Unity不久,为了记录自己学习的过程.我决定写写博客,哈哈哈.在网上看了一些拾取物品的实现原理之后,自己摸索了一下,写了个小Demo,下面来介绍一下 ...

最新文章

  1. 腾讯的模板引擎---artTemplate
  2. i2c Linux 动态 波特率,如何在Linux中设置i2c总线的波特率?
  3. 本地缓存需要高时效性怎么办_太难为我了,为了这份P7岗offer,我承受了7轮面试...
  4. 【PhotoScan精品教程】任务一:新建工程、导入照片、设置坐标系、导入控制点(POS)、自由空三
  5. android 之 百度地图
  6. ENSP配置 实例五 RIP配置
  7. 微服务架构的优缺点_微服务架构DNS服务注册与发现实现原理
  8. 本地文件上传至docker容器
  9. Windows句柄和指针的区别
  10. 从零开始学前端:上节课案例+break,continue以及while和do while --- 今天你学习了吗?(JS:Day5)
  11. 三、实战小例程 基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方
  12. 谷歌学术镜像_Google镜像站
  13. 3.0.0 alpha 重磅发布!九大新功能、全新 UI 解锁调度系统新能力
  14. [Qt笔记]设置VS2015下的应用工程图标
  15. rabbitmq:publisher confirms
  16. 【智能电视必装软件】小鲸电视、hdp直播国庆假期经典好剧随心看
  17. 上拉刷新下拉加载的实现
  18. java 电梯类图,电梯控制系统(用UML图理解)
  19. 经典乘法口诀表(C++)
  20. 这个将996反对到极致的网站,在GitHub上的Star数已经狂飙到 10 万+了

热门文章

  1. win10专业版180天bat激活脚本
  2. linux透明防火墙接入fte 300 网络的问题
  3. Laravel Lang的初次使用,以及如何多个文件或目录管理语言
  4. Syncovery 自动备份工具
  5. 北邮22信通:二叉树各种遍历所有常见算法汇总
  6. Powershell下载文件的三种方法
  7. ghost2003镜像失败,显示PC DOS 7.1,系统无法正常启动
  8. IntelliJ IDEA 2020.2 稳定版发布
  9. linux2012年上机测试,linux上机复习题(部分答案)
  10. [网安实践III] 实验3.逆向分析