Unity Scheduler 定时器

创建定时器,多少秒后启动,运行次数, 运行时间间隔

using System;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

//定时器回调函数
public delegate void SchedulerCallback();

public class SchedulerData
{
    private float startInterval;        //多少秒后启动
    private int runCount;               //运行次数
    private float timeInterval;         //每两次运行的时间间隔
    private SchedulerCallback callback; //回调

    private bool isPause = false;
    public IEnumerator handle;          //用于关闭定时器

    public SchedulerData(float _startInterval = 0, int _runCount = 0, float _timeInterval = 1.0f, SchedulerCallback _callback = null)
    {
        startInterval = _startInterval;
        runCount = _runCount;
        timeInterval = _timeInterval;
        callback = _callback;
    }
    public IEnumerator RunFunction()
    {
        yield return new WaitForSeconds(startInterval);
        int count = 0;
        while (true)
        {
            if (0 < runCount && runCount <= count)
            {
                break;
            }
            if (isPause)
            {
                continue;
            }
            if (null != callback)
            {
                try
                {
                    callback();
                }
                catch (Exception e)
                {
                    Debug.LogError(e);
                }
            }
            count++;
            yield return new WaitForSeconds(timeInterval);
        }
    }
}

public class Scheduler : MonoBehaviour
{
    public static Scheduler Instance;
    private Dictionary<string, SchedulerData> schedulers = new Dictionary<string, SchedulerData>();

    private void Awake()
    {
        Instance = this;
    }
    //关闭定时器
    public void Stop(string name)
    {
        SchedulerData scheduler;
        if (schedulers.TryGetValue(name, out scheduler))
        {
            if (null != scheduler.handle)
            {
                StopCoroutine(scheduler.handle);
            }
            //移除
            schedulers.Remove(name);
        }
    }

    public SchedulerData CreateScheduler(string name, float _startInterval = 0, int _runCount = 0, float _timeInterval = 1.0f, SchedulerCallback _callback = null)
    {
        if (string.IsNullOrEmpty(name))
        {
            Debug.LogError("The name is illegal");
            return null;
        }
        SchedulerData scheduler = new SchedulerData( _startInterval, _runCount, _timeInterval, _callback);
        scheduler.handle = scheduler.RunFunction();
        StartCoroutine(scheduler.handle);
        if (schedulers.ContainsKey(name))
        {
            //关闭同名定时器
            Stop(name);
            Debug.LogError("Create Same name Scheduler!!!");
        }
        //保存
        schedulers.Add(name, scheduler);
        return scheduler;
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

achonor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值