您当前的位置: 首页 >  unity
  • 3浏览

    0关注

    193博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity实现简单技能冷却管理器

我寄人间雪满头丶 发布时间:2021-09-18 10:42:20 ,浏览量:3

前言

这段时间做技能系统,需要实现技能冷却。如果每个技能都写一段计时器代码的话重复性太高而且还不方便管理,于是根据使用到的功能写了个简单的冷却管理器统一处理。

实现

代码很简单,理解思路即可。

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

public class CDMgr : MonoSingleton  //这里继承的单例,可自己实现
{
    Dictionary dic = new Dictionary(); //保存id和cd时长信息
    Dictionary cds = new Dictionary(); //保存当前的cd
    List ids = new List(); //保存id

    void Update()
    {
        //冷却计时
        if (ids.Count > 0)
        {
            ids.ForEach(_ =>
            {
                if (cds[_] > 0)
                {
                    cds[_] -= Time.deltaTime;
                }
                else
                {
                    cds[_] = 0;
                }
            });
        }
    }

    //第一个参数传字符串也可,这里为了方便传参用的枚举
    //第二个参数为cd时长
    public void AddCD(string id, float time)
    {
        if (dic.ContainsKey(id))
        {
            Debug.LogError("该ID已存在!");
            return;
        }
        dic.Add(id, time);
        cds.Add(id, 0); //一开始没进入冷却
        ids.Add(id);
    }

    //进入冷却
    void StartCal(string id)
    {
        if (!dic.ContainsKey(id))
        {
            Debug.LogError("不存在该ID!");
            return;
        }

        cds[id] = dic[id];
    }

    //是否冷却结束,如果冷却结束会返回true并重新开始计算cd
    public bool IsReady(string id)
    {
        if (cds.ContainsKey(id))
        {
            if (cds[id]             
关注
打赏
1648518768
查看更多评论
0.1932s