using System; using System.Collections; using UnityEngine; public class Timer { public delegate void OnEndDelegate(); public float RemainTimeSec; public bool IsEnd { get; protected set; } public event OnEndDelegate onEndEvent; public Timer(float time, OnEndDelegate onEndEvent) { RemainTimeSec = time; this.onEndEvent = onEndEvent; IsEnd = false; } public virtual void Update() { if (!IsEnd) { RemainTimeSec -= Time.deltaTime; if (!(RemainTimeSec > 0f)) { IsEnd = true; CallEvent(); } } } public void CallEvent() { this.onEndEvent(); } public void Cancel() { IsEnd = true; } public static IEnumerator DelayMethod(float waitTime, Action process) { yield return new WaitForSeconds(waitTime); process?.Invoke(); } }