Jump to content
Unity Insider Forum

DelayedCall - Verzögertes ausführen - Coroutine flexibel anwenden


MaZy

Recommended Posts

Hallo,

 

vielleicht kennt ihr das. Mal eine Funktion etwas verspätet aufrufen oder eine Variable später verändern. Dazu benutzt man in Normalfall Invoke. Oder eventuell IEnumerator Funktionen. Mich hat es aber genervt, dass ich für jede Kleinigkeit etwas dafür erstellen muss.

 

Bespiel

  • Player stirbt, warte zwei Sekunde um das GameOvermenü zu zeigen.

Daher hab ich eine kleine Klasse erstellt, wo ich für das hier schneller und flexibel machen lässt.

DelayedCall.Exec(float delay, System.Action onFinished);
 

 

Anwendung:

Einfach den Script in beliebigen Ordner (in der Assetsordner natürlich) rein packen und die Funktion anwenden. Sonst wird nichts gebraucht.

DelayedCall spawnt eigenständig, wenn man ihn braucht.

 

Anwendungsbeispiele:

 

DelayedCall.Exec(2f, () => {
UIManager.ShowGameOver();
});
 
DelayedCall.Exec(2f, CallBackFunktion);

void CallBackFunktion()
{
isCallbackDone = true;
}
 

 

 

 

 


using System.Collections;
using UnityEngine;
public class DelayedCall : MonoBehaviour {
static DelayedCall m_instance;
public static DelayedCall instance
{
	get
	{
		if(m_instance == null)
		{
			CreateInstance();
		}
		return m_instance;
	}
}
static void CreateInstance()
{
	var DC = FindObjectOfType<DelayedCall>();
	if (!DC)
	{
		GameObject g = new GameObject("DelayedCallInstance");
		DC = g.AddComponent<DelayedCall>();
	}
	DC.gameObject.hideFlags = HideFlags.HideInHierarchy;
	DontDestroyOnLoad(DC.gameObject);
	m_instance = DC;
}
void Awake()
{
	if (!m_instance)
		CreateInstance();
}
public static void Exec(float delay, System.Action onFinished)
{
	if(instance)
		instance.StartCoroutine(instance.DelayCallCoroutine(delay, onFinished));
}
IEnumerator DelayCallCoroutine(float delay, System.Action onfinished)
{
	yield return new WaitForSeconds(delay);
	onfinished();
}
}
 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...