• 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 = "延迟测试结束!"; 就是想要延迟执行的代码段。

     测试结果:

     

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

  • 相关阅读:
    jpype
    Java获取类中的所有方法
    SQL中INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN区别
    如何用命令将本地项目上传到git
    Java连接Mysql:通过配置文件
    lsof -i:port_number
    yum install lsof
    Git的基本使用方法(受益匪浅)
    [后端]gitlab之gitlab-ci自动部署
    centos7安装redis-4.0.1集群
  • 原文地址:https://www.cnblogs.com/ChenZiRong1999/p/13206387.html
Copyright © 2020-2023  润新知