服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - Unity延时执行的多种方法小结

Unity延时执行的多种方法小结

2022-11-24 11:08时光不染 C#

本文主要介绍了4种延时执行的方法,主要包括Update计时器,Invoke,协程,DoTween,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

最开始接触unity的时候,我做延时都是在update里做计时器。后来才发现,我屮艸芔茻,还有这么多种更方便延时执行的方式。现在我们就来捋一捋。

本文列举的有以下四种,如有错漏,欢迎补充指正

 

* Update Invoke 协程 DoTween
支持参数传入 X X X

 

下表是在不同情况下各方案的执行状态

 

* Update Invoke 协程 DoTween
Time.timeScale = 0 X X
activeSelf == false X X
enabled == false X
destroy X X X

 

Update计时器

在Update等刷新函数内计时,timer += Time.deltaTime 当时间达到预期,执行需要延时的方法。 需要注意的是,增量时间Time.deltaTime是每帧都不同的浮点数。计时器不能用 == 去判断达成条件。需要用 > 或 >= 加一个标志位。以确保函数能执行到且只执行一次 Update在 Time.timeScale = 0 时会正常执行,但这时Time.deltaTime的值为0。需要这时使用计时器的话,可以使用Time.realtimeSinceStartup

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private float delayTime = 1;
   private float timer = 0;
   private bool executed = false;
   void Update(){
       if (executed == false){
           timer += Time.deltaTime;
           if (timer >= 1){
               executed = true;
               DelayFunc();
           }
       }
   }
   private void DelayFunc(){
       print("执行测试函数");
   }

Invoke

Invoke() 方法是 Unity3D 的一种委托机制。使用简单便捷。 但是这个家伙和其他方式不太一样的是,隐藏物体或将脚本enabled 设置为false,并不会中断Invoke的执行。 Invoke支持重复调用: InvokeRepeating("方法名",延时时长,每次调用间隔时长)

?
1
2
3
4
5
6
7
8
private float delayTime = 5;
   private void Start(){
       Invoke("DelayFunc",delayTime);
       //InvokeRepeating("DelayFunc",delayTime,cdTime);
   }
   private void DelayFunc(){
       print("执行测试函数");
   }

协程

协程本质是迭代器,写法麻烦,但很好用。可以延时固定时间,也可以延时固定帧。
点击这里是一个协程的管理类,支持暂停继续等功能

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private float timer = 0;
  private void Start()
  {
      StartCoroutine("DelayFunc");
      Time.timeScale = 0;
  }
  IEnumerator DelayFunc()
  {
      while ( timer < 30)
      {
          yield return new WaitForSeconds(1);
          timer++;
          print("执行测试函数"+timer);
      }
  }

DoTween

如果你使用UGUI,那么你一定知道DoTween。DoTween是很常用的简单动画插件,但有时候我们能用它来做一些奇怪的操作。比如延时函数 执行后只能通过 seq.Pause();seq.Kill();等自带函数关闭。 Time.timeScale = 0,隐藏物体,禁用脚本,删除物体等情况下,均继续执行方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
private void Start()
   {
       seq = DOTween.Sequence();
       seq.AppendInterval(5);
       seq.AppendCallback(DelayFunc);
       seq.SetAutoKill(false);
       seq.SetUpdate(true);//设为true时可在Time.timeScale=0的情况下正常执行
       
   }
   void DelayFunc()
   {
       print("执行测试函数");
   }

到此这篇关于Unity延时执行的多种方法小结的文章就介绍到这了,更多相关Unity延时执行内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/hzhnzmyz/article/details/118422189

延伸 · 阅读

精彩推荐
  • C#C#中try...catch的使用与常见面试题分享

    C#中try...catch的使用与常见面试题分享

    这篇文章首先给大家介绍了关于C#中try...catch的语法,而后又给大家分享了关于C#中try...catch最常见的面试题,具有一定的参考借鉴价值,需要的朋友们下面...

    wolfy10852021-12-27
  • C#Unity实现背景图片淡入淡出效果

    Unity实现背景图片淡入淡出效果

    这篇文章主要为大家详细介绍了Unity实现背景图片淡入淡出,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    liuyanlei199010102022-03-11
  • C#C#实现rabbitmq 延迟队列功能实例代码

    C#实现rabbitmq 延迟队列功能实例代码

    本篇文章主要介绍了C#实现rabbitmq 延迟队列功能实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。...

    ThisIsTest8862021-12-31
  • C#c#在WebAPI使用Session的方法

    c#在WebAPI使用Session的方法

    这篇文章主要介绍了c#在WebAPI使用Session的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    天涯过者10962022-02-25
  • C#如何使用Dapper处理多个结果集与多重映射实例教程

    如何使用Dapper处理多个结果集与多重映射实例教程

    Dapper类是一个开源的数据库操作类,下面这篇文章主要给大家介绍了关于如何使用Dapper处理多个结果集与多重映射的相关资料,文中通过示例代码介绍的非...

    省厓3562022-03-01
  • C#C#正则匹配RegexOptions选项的组合使用方法

    C#正则匹配RegexOptions选项的组合使用方法

    本文主要简单介绍RegexOptions各种选项的作用,并介绍如何组合使用,为初学者解除一些疑惑。...

    minlecun5232021-11-17
  • C#C#创建及读取DAT文件操作

    C#创建及读取DAT文件操作

    这篇文章主要介绍了C#创建及读取DAT文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    秋漓10862022-10-21
  • C#C#编程总结(一)序列化总结

    C#编程总结(一)序列化总结

    本篇主要介绍了C#序列化总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    停留的风7122021-12-11