Unity 延遲執行一段代碼的較爲優雅的方式

在Unity中,延時執行一段代碼或者一個方法或者幾個方法的狀況很是廣泛。html

通常會用到Invoke和InvokeRepeating方法。顧名思義,第一個是執行一次,第二個是重複執行。異步

看下定義:函數

void Invoke(string methodName, float time);

 

第一個參數是方法名(注意是字符串形式),並非更方便的委託。第二個是延時多少秒。只執行一次。spa

void InvokeRepeating(string methodName, float time, float repeatRate);

 

InvokeRepeating第二個參數是延時多少秒後開始,第三個參數是每次執行間隔的秒數。code

 

你有沒有發現這兩個方法有個弊端,就是必須輸入方法名!也就是我說,若是我想延時執行某段代碼,必須把代碼放在某個方法裏,而後使用這Invoke或者InvokeRepeating方法來執行。htm

這樣對於上下文變量、屬性的引用就會尤其不便,並且不能傳參數!!!尼瑪,要他還有何用?遊戲

 

我猜你必定用過這樣的方法。沒錯,「協同」,聽起來還挺高大上的名字啊。字符串

用StartCoroutine來執行一個以IEnumerator爲返回值的方法,一般用於異步下載啊,等比較耗時又不能讓遊戲卡死的狀況。get

還有一個好的類WaitForSeconds,對,它就一個構造函數,用來延時的(延時………………比萬艾可好用?比希愛力好用?)。string

好了不廢話了,如下是我自用的延時方法,放在一個類裏以靜態方法存在。能夠在任什麼時候候任何地方延時指定秒數的代碼。

using UnityEngine;
using System.Collections;
using System;

public class DelayToInvoke : MonoBehaviour
{
  public static IEnumerator DelayToInvokeDo(Action action, float delaySeconds)
  {
    yield return new WaitForSeconds(delaySeconds);
    action();
  }
}

 

 

如何使用呢?

好比我點擊NGUI的一個Button,則

<span style="font-family: 宋體, san-serif; color: rgb(0, 0, 255);"></span><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; font-size: 14px;"><span style="color: rgb(0, 0, 255);">void</span> OnClick()
{ StartCoroutine(DelayToInvoke.DelayToInvokeDo(() => { Application.LoadLevel(「Option」); }, 0.1f));}
 

 

看到了吧

Application.LoadLevel(「Option」);就是想要延時執行的代碼段。

你能夠寫很長很長。Action,隨便搞。



原文地址:http://www.myext.cn/other/a_25720.html

相關文章
相關標籤/搜索