zoukankan      html  css  js  c++  java
  • Unity 延迟执行函数

     在 Unity 项目开发中,延迟执行一段代码、一个方法甚至几个方法的情况是普遍存在的。

     一般会用到 Invoke InvokeRepeating 方法。

     第一个参数为方法名(注意是字符串形式),并不是更方便的委托;

     第二个参数是延迟执行的时间;

     这个方法只会执行一次。

     第一个参数同样为方法名(字符串形式);

     第二个参数是延迟多少秒后开始调用;

     第三个参数是每次执行的间隔时间。

     到这里就会发现,这两个方法都有个弊端,就是必须输入字符串形式的方法名!

     也就是说,如果想延迟执行某段代码,必须把代码放在某个方法里,然后使用 Invoke 或者 InvokeRepeating 方法来延迟执行。

     这样对于上下文变量、属性的引用就会尤为不便,而且不能传入参数。

     也可以利用 StartCoroutine 来执行一个以 IEnumerator 为返回值的方法,但这种方法通常用于异步下载、加载等比较耗时又不能让游戏卡死的情况。

     还有一个 WaitForSeconds 类,它是一个构造函数,也适用于延迟执行的情况。

     将延迟方法放在一个类里以静态方法的形式存在,就可以在任何时候、任何地方延迟执行指定时间的代码:

     1 using System;
     2 using System.Collections;
     3 using UnityEngine;
     4 
     5 public class DelayTest : MonoBehaviour
     6 {
     7     public static IEnumerator DelayToInvoke(Action action, float delaySeconds)
     8     {
     9         yield return new WaitForSeconds(delaySeconds);
    10         action();
    11     }
    12 }

     例如:点击 OnGUI 的按钮去延迟更改界面上的显示文本

     1     private string textTestString = "点击开始测试!";
     2 
     3     void OnGUI()
     4     {
     5         GUI.BeginGroup(new Rect(Screen.width / 2 - 50, Screen.height / 2 - 50, 300, 300));
     6         GUI.Box(new Rect(0, 0, 200, 200), "测试界面");
     7         GUI.Label(new Rect(60, 50, 150, 30), textTestString);
     8         if (GUI.Button(new Rect(50, 120, 100, 30), "开始测试"))
     9         {
    10             textTestString = "测试延迟中... ...";
    11             StartCoroutine(DelayTest.DelayToInvoke(() => { textTestString = "延迟测试结束!"; }, 1f));
    12         }
    13         GUI.EndGroup();
    14     }

     textTestString = "延迟测试结束!"; 就是想要延迟执行的代码段。

     测试结果:

     

    *** |  以上内容仅为学习参考、学习笔记使用  | ***

  • 相关阅读:
    阿里云RDS的mysql数据库连接
    DRF框架400错误信息处理(视图集)
    关于百度Tongji Api的文档补充
    Python几种创建list的方法的效率对比
    手把手教你使用python复杂一点点的装饰器
    Python爬虫常用模块,BeautifulSoup笔记
    LSSS 构造过程
    微信网站应用扫码登陆
    分享一个自用的 Inno Setup 软件打包脚本
    彻底解决:请求被中止: 未能创建 SSL/TLS 安全通道
  • 原文地址:https://www.cnblogs.com/ChenZiRong1999/p/13206387.html
Copyright © 2011-2022 走看看