遅延実行を実現する Unity の 3 つの方法

1.タイマー

1.定义一个float 的变量
2.然后逐帧减去Time.DeltaTime 的值,直到最后小于0
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

class Test : MonoBehaviour{
    
    
	private float timer = 2f;
	
	void Update(){
    
    
		if(timer < 0){
    
    
			//Doing Something...
		}else{
    
    
			timer -= Time.DeltaTime;
		}
	}
}

1. コルーチン

1.このコルーチンを開く IEnumerator だけで、値を返すメソッドを定義します。StartCoroutine

ここで使用する必要があるのは、2 つの違いではIEnumeratoないことに注意してください。IEnumerable

  • IEnumerator: イテレータ インターフェイスです
  • IEnumerable: IEnumerator に基づくカプセル化インターフェイスであり、IEnumerator を返す GetEnumerator() メソッドがあります。

StartCoroutine のいくつかのオーバーロード方法

  • StartCoroutine(string methodName): これは、パラメータがない場合にのみ適用されます
  • StartCoroutine(IEnumerator routine): メソッドによって呼び出されます
  • StartCoroutine(string methodName, object values) : パラメーターでの使用に適用され、それに応じてパラメーターの値が渡されます


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

class Test : MonoBehaviour{
    
    
	void Start(){
    
    
		StartCoroutine(Func(2.0f));
		//StartCoroutine("Func", 2.0f)
	}

	IEnumerator Func(float delay){
    
    
		yield return new WaitForSeconds(delay); //程序在这里等待delay长的时间后,再去往下执行
		//Doing Something...
	}
}

yield補足

  • yield return null: コルーチンを一時停止して、次のフレームが実行を継続するのを待ちます

  • yield return 0或其他数字: コルーチンを一時停止して、次のフレームが実行を継続するのを待ちます

  • yield return new WairForSeconds(时间):指定時間待ってから実行を継続

  • yield return StartCoroutine("协程方法名"): コルーチンを開く (ネストされたコルーチン)


  • yield return GameObject; ゲームオブジェクト取得時に実行
  • yield return new WaitForFixedUpdate():次の固定フレーム番号の更新まで待ちます
  • yield return new WaitForEndOfFrame(): すべてのカメラ画像がレンダリングされて更新されるまで待ちます
  • yield break; コルーチンの対応するメソッドから飛び出し、その後ろのコードは実行されません

3.電話をかける

Invokeこれも Unity の遅延呼び出しメカニズムですが、呼び出された関数にパラメーターを指定することはできません

Invokeよく使われる2つの方法

  • Invoke(string methodName, float time): time 秒の遅延の後に methodName 関数を呼び出します
  • InvokeRepeating(string methodName, float time, int repeatRate): repeatRate 呼び出しを繰り返す
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

class Test : MonoBehaviour{
    
    
	void Start(){
    
    
		Invoke("Func", 2);
		//InVoke("Func", 2 ,3);
	}

	void Func(float delay){
    
    
		Debug.Log("Doing Something... ")
		//Doing Something...
	}
}

おすすめ

転載: blog.csdn.net/blastospore/article/details/130046019