Unity通用计时器

Unity通用计时器

  1. 计时器支持开始、暂停、继续、取消等功能,可设置计时时间和重复计时的次数。
  2. 计时器由Timer和TimerDriver控制,其中Timer设置计时器参数,TimerDriver实现计时
代码:

Timer管理器,负责创建TimerDriver

    using UnityEngine;
    public class TimerManager : MonoSingleton<TimerManager>
    {
   

        private void Awake()
        {
   
            gameObject.hideFlags = HideFlags.HideInHierarchy;
        }

        /// <summary>
        /// 创建计时驱动器
        /// </summary>
        /// <param name="data"></param>
        public TimerDriver CreateTimerDriver(Timer data)
        {
   
            GameObject driverTarget = new GameObject();
            driverTarget.name = "TimeDriver";
            driverTarget.transform.SetParent(transform);
            TimerDriver driver = driverTarget.AddComponent<TimerDriver>();
            driver.InitTimerDriver(data);
            return driver;
        }

    }

Timer:负责创建计时器,暂停、继续等功能,存储计时相关数据

    using System;
    public class Timer
    {
   

        /// <summary>
        /// 延迟时间
        /// </summary>
        public float delayTime {
    get; private set; }
        /// <summary>
        /// 持续时间
        /// </summary>
        public float duration {
    get; private set; }
        /// <summary>
        /// 计时检测间隔
        /// </summary>
        internal float intervalTime {
    get; private set; }
        /// <summary>
        /// 重复次数
        /// </summary>
        public int repeatCount {
    get; private set; }
        /// <summary>
        /// 重复间隔
        /// </summary>
        public float repeatTime {
    get; private set; }

        /// <summary>
        /// 已重复计时次数
        /// </summary>
        public int repeatedCount {
    get; private set; }
        /// <summary>
        /// 当前次 已计时时间
        /// </summary>
        public float passedTime {
    get; private set; }

        internal enum TimerState
        {
   
            /// <summary>
            /// 开始计时
            /// </summary>
            Start,
            /// <summary>
            /// 准备计时
            /// </summary>
            Prepare,
            /// <summary>
            /// 计时中
            /// </summary>
            Timing,
            /// <summary>
            /// 暂停计时
            /// </summary>
            Pause,
            /// <summary>
            /// 停止计时
            /// </summary>
            Stop,
        }
        /// <summary>
        /// 计时器状态
        /// </summary>
        internal TimerState currentTimerState {
    get; private set; }

        /// <summary>
        /// 是否忽略时间速率
        /// </summary>
        internal bool ignoreTimeScale {
    get; private set; }

        /// <summary>
        /// 开始
        /// </summary>
        private Action onStart;
        /// <summary>
        /// 暂停
        /// </summary>
        private Action onPause;
        /// <summary>
        /// 继续
        /// </summary>
        private Action onResume;
        /// <summary>
        /// 完成
        /// </summary>
        private Action onCompleted;
        /// <summary>
        /// 取消
        /// </summary>
        private Action onCancel;
        /// <summary>
        /// 正在计时中
        /// </summary>
        private Action<float> onTiming;

        /// <summary>
        /// 重开始
        /// </summary>
        private Action onReStart;

        /// <summary>
        /// 驱动器 暂停
        /// </summary>
        private Action onDriverPause;
        /// <summary>
        /// 驱动器 继续
        /// </summary>
        private Action onDriverResume;

        private Timer()
        {
   
            repeatedCount = 0;
            passedTime = 0;
        }

        ~Timer()
        {
   
            onStart = null;
            onPause = null;
            onResume = null;
            onCompleted = null;
            onCancel = null;
            onTiming = null;
            onReStart = null;
            onDriverPause = null;
            onDriverResume = null;
        }

        /// <summary>
        /// 开始计时
        /// </summary>
        /// <param name="duration">计时时长(/s)</param>
        /// <param name="intervalTime">检测间隔(/s)</param>
        /// <param name="completed">计时完成回调</param>
        /// <param name="ignoreTimeScale">是否忽略时间速率</param>
        /// <returns></returns>
        public static Timer Start(float duration, Action completed, float intervalTime = 1, bool ignoreTimeScale = false)
        {
   
            return Start(duration, 0, intervalTime, 0, 0, null, null, completed, null, null, null, null, ignoreTimeScale);
        }
        /// <summary>
        /// 开始计时
        /// </summary>
        /// <param name="duration">计时时长(/s)</param>
        /// <param name="delayTime">延时计时时长(/s)</param>
        /// <param name="intervalTime">检测间隔(/s)</param>
        /// <param name="completed">计时完成回调</param>
        /// <param name="ignoreTimeScale">是否忽略时间速率</param>
        /// <returns></returns>
        public static Timer Start(float duration, float delayTime, Action completed, float intervalTime = 1, bool ignoreTimeScale = false)
        {
   
            return Start(duration, delayTime, intervalTime, 0, 0, null, null, completed, null, null, null, null, ignoreTimeScale);
        }
    
        /// <summary>
        /// 开始计时
        /// </summary>
        /// <param name="duration">计时时长(/s)</param>
        /// <param name="intervalTime">检测间隔(/s)</param>
        /// <param name="completed">计时完成回调</param>
        /// <param name="update">计时中回调</param>
        /// <param name="ignoreTimeScale">是否忽略时间速率</param>
        /// <returns></returns>
        public static Timer Start
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值