Encapsulate a unity timer and callback method after timing.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class TimingMachinesMgr
{
private static InternalBehaviour m_IB;
static TimingMachinesMgr()
{
GameObject go = new GameObject("TimingMachinesMgr");
GameObject.DontDestroyOnLoad(go);
m_IB = go.AddComponent<InternalBehaviour> ();
}
//等待计时
static public Coroutine WaitTime(float time,UnityAction callback)
{
return m_IB.StartCoroutine(Coroutine(time,callback));
}
//取消等待
static public void CancelWait(ref Coroutine coroutine)
{
if (coroutine != null) {
Debug.LogError("停止计时器!!!");
m_IB.StopCoroutine(coroutine);
coroutine = null;
}
}
static IEnumerator Coroutine(float time, UnityAction callback) {
yield return new WaitForSeconds (time);
if (callback != null) {
callback();
}
}
//内部类
class InternalBehaviour : MonoBehaviour{}
}
transfer:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class testtimeerrr : MonoBehaviour
{
Coroutine coroutine;
// Start is called before the first frame update
void Start()
{
coroutine = TimingMachinesMgr.WaitTime(5.0f,delegate{
Debug.LogError("回调方法!!!");
});
}
// Update is called once per frame
void Update()
{
if(Input.GetKeyDown(KeyCode.Space)){
TimingMachinesMgr.CancelWait(ref coroutine);
}
}
}
There is another author who writes very well, you can refer to:[CFramework] Unity timer Timer encapsulates C#_cchoop's blog-CSDN blog_unity uses c# timer a>