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             StartCoroutine(DelayTest.DelayToInvoke(() => { textTestString = "延迟调用测试!"; }, 1f));
11         }
12         GUI.EndGroup();
13     }

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

 测试结果:

 

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

猜你喜欢

转载自www.cnblogs.com/ChenZiRong1999/p/13206387.html