前言
这段时间做技能系统,需要实现技能冷却。如果每个技能都写一段计时器代码的话重复性太高而且还不方便管理,于是根据使用到的功能写了个简单的冷却管理器统一处理。
实现代码很简单,理解思路即可。
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]
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?