MaZy Geschrieben 11. Januar 2017 Melden Share Geschrieben 11. Januar 2017 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(); } } 3 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.