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

     测试结果:

     

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

  • 相关阅读:
    HTML+CSS基础
    学习C++——实践者的方法(转整)
    招聘要求看技术发展
    笔记本自建无线wifi
    sortAlgorithms
    耐得住寂寞,拥得了繁华
    C++函数重载实现原理浅析
    程序员指南
    tf.image.non_max_suppression()
    函数 不定长参数
  • 原文地址:https://www.cnblogs.com/ChenZiRong1999/p/13206387.html
Copyright © 2011-2022 走看看