您当前的位置: 首页 >  unity

幻世界

暂无认证

  • 6浏览

    0关注

    237博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【HSJFramework】Unity时间管理TimeManger计时器

幻世界 发布时间:2022-04-24 14:58:31 ,浏览量:6

 

目录

一:介绍

二:计时器Timer类的编写

三:计时器管理TimerManager类的编写

四:使用方法

一:介绍

这里我们使用List来管理定义的所有计时器Timer,首先就是需要构建计时器的完整逻辑,包括计时器结束后需要执行的事件逻辑OnFinished,以及这个计时器的生命周期delyaTime,结束的时间点finishTime,包括当前计时器是否是循环执行isLoop,以及当前计时器是否结束的标签isFinish

每当我们需要定义新的计时器的时候就生成新的计时器并添加进表里,实时去判断当前计时器是否结束并维护这个list。

二:计时器Timer类的编写
  public class Timer
    {
        private Action OnFinished;
        private float finishTime;
        private float delyaTime;
        private bool isLoop;
        private bool isFinish;

        public Timer(Action onFinished, float delyaTime, bool isLoop)
        {
            OnFinished = onFinished;
            this.finishTime = Time.time + delyaTime;
            this.delyaTime = delyaTime;
            this.isLoop = isLoop;
            this.isFinish = false;
        }

        public bool IsFinish => isFinish;
        public void StopTimer() => isFinish = false;

        public void UpdataTimer()
        {
            if (isFinish) return;
            if (Time.time < finishTime) return;

            if (!isLoop) StopTimer();
            else finishTime = Time.time + delyaTime;

            OnFinished?.Invoke();
        }
    }
三:计时器管理TimerManager类的编写
 public class TimerManager : BaseManager
    {
        private List updateTimersList = new List();
        public Timer AddTimer(Action onFinishef, float delayTime, bool isLoop = false)
        {
            Timer timer =  new Timer(onFinishef, delayTime, isLoop);
            updateTimersList.Add(timer);
            return timer;
        }
        public void Update()
        {
            if (updateTimersList.Count == 0) return;
            for (int i = 0; i < updateTimersList.Count; i++)
            {
                if (updateTimersList[i].IsFinish)
                {
                    updateTimersList.RemoveAt(i);
                }
                else
                {
                    updateTimersList[i].UpdataTimer();
                }
            }
        }
    }
四:使用方法
 private void Start()
        {
            TimerManager.Instance.AddTimer(()=>{ Debug.Log("I am Timer001!"); },2,true);
        }

关注
打赏
1660704426
查看更多评论
立即登录/注册

微信扫码登录

0.0490s