Jump to content
Unity Insider Forum
Sign in to follow this  
MaZy

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

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();
}
}
 

 

  • Like 3

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×