/// <summary> /// 注册一个新的计时器,该计时器应在经过一定时间后触发一个事件。 /// 当场景改变时,已注册的计时器将被销毁。 /// </summary> /// <param name="duration">计时器启动之前要等待的时间(以秒为单位),</param> /// <param name="onComplete">计时器完成时触发的动作。</param> /// <param name="onUpdate">每次更新计时器时应触发的操作。 自计时器电流循环开始以来经过的时间(以秒为单位)。</param> /// <param name="isLooped">执行后计时器是否应重复。</param> /// <param name="useRealTime">计时器使用的是实时时间(即不受暂停,慢动作/快动作的影响)还是游戏时间(受暂停和慢动作/快动作的影响)。</param> /// <param name="autoDestroyOwner">将此计时器附加到的对象。 对象销毁后,计时器将到期且不执行。 这样可以避免烦人</param> /// <returns>一个计时器对象,使您可以检查统计信息并停止/恢复进度。</returns> public static DSTimer Register(float duration, Action onComplete, Action <float> onUpdate = null, bool isLooped = false, bool useRealTime = false, MonoBehaviour autoDestroyOwner = null) { // 创建一个管理器对象以更新所有计时器(如果尚不存在)。 if (DSTimer._manager == null) { TimerManager managerInScene = Object.FindObjectOfType <TimerManager>(); if (managerInScene != null) { DSTimer._manager = managerInScene; } else { GameObject managerObject = new GameObject { name = "TimerManager" }; DSTimer._manager = managerObject.AddComponent <TimerManager>(); } } DSTimer dsDSTimer = new DSTimer(duration, onComplete, onUpdate, isLooped, useRealTime, autoDestroyOwner); DSTimer._manager.RegisterTimer(dsDSTimer); return(dsDSTimer); }
/// <summary> /// 重置计算器 /// </summary> public static void Resume(DSTimer dsDSTimer) { if (dsDSTimer != null) { dsDSTimer.Resume(); } }
/// <summary> /// 暂停计时器 /// </summary> public static void Pause(DSTimer dsDSTimer) { if (dsDSTimer != null) { dsDSTimer.Pause(); } }
/// <summary> /// 取消计时器 /// </summary> public static void Cancel(DSTimer dsDSTimer) { if (dsDSTimer != null) { dsDSTimer.Cancel(); } }
/// <summary> /// 将计时器附加到该行为。 如果在计时器完成之前行为已被破坏,例如 通过场景更改,计时器回调将不会执行。 /// </summary> public static DSTimer AttachTimer(this MonoBehaviour behaviour, float duration, Action onComplete, Action <float> onUpdate = null, bool isLooped = false, bool useRealTime = false) { return(DSTimer.Register(duration, onComplete, onUpdate, isLooped, useRealTime, behaviour)); }
public void RegisterTimer(DSTimer dsDSTimer) { this._timersToAdd.Add(dsDSTimer); }