123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- using System;
- using System.Collections.Generic;
- using System.Collections.Concurrent;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using UnityEngine;
- /// <summary>
- /// 轮询管理器
- /// </summary>
- public class PollingManager : MonoSingleton<PollingManager>
- {
- /// <summary>
- /// 轮询事务
- /// </summary>
- public class PollItem
- {
- /// <summary>
- /// 唯一id
- /// </summary>
- public string Id;
- /// <summary>
- /// 回调函数
- /// </summary>
- public Action Callback;
- /// <summary>
- /// 时间间隔(秒)
- /// </summary>
- public int Interval_sec;
- public void Update()
- {
- timespan += Time.deltaTime;
- if (timespan > Interval_sec)
- {
- timespan -= Interval_sec;
- Callback?.Invoke();
- }
- }
- /// <summary>
- /// 时间
- /// </summary>
- private float timespan = 0;
- }
- Dictionary<string, PollItem> PollItems = new Dictionary<string, PollItem>();
- /// <summary>
- /// 注册轮询事务
- /// </summary>
- /// <param name="Uni_ID">字符串:唯一id</param>
- /// <param name="interval_seconds">时间间隔,单位:秒(若需更高精度请自行管理你的轮询)</param>
- /// <param name="callBack">回调函数</param>
- public void Register(string Uni_ID, int interval_seconds, Action callBack)
- {
- PollItems[Uni_ID] = new PollItem { Id = Uni_ID, Interval_sec = interval_seconds, Callback = callBack };
- }
- /// <summary>
- /// 删除轮询事务
- /// </summary>
- /// <param name="Uni_ID"></param>
- public void Unregister(string Uni_ID)
- {
- if (PollItems.ContainsKey(Uni_ID))
- {
- PollItems.Remove(Uni_ID);
- }
- }
- private void FixedUpdate()
- {
- foreach (var item in PollItems.Values) { item.Update(); }
- }
- }
|