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 = "延遲測試結束!"; 就是想要延遲執行的代碼段。

 測試結果:

 

 

 

*** |  以上內容僅為學習參考、學習筆記使用  | ***


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM