帧同步BUFF功能实现¶
buff其实也是技能的一部分,和技能的区别主要在于其不是由玩家操作直接触发,而是通过技能、道具或者条件进行的一种附着施加,可以有持续附着触发逻辑的效果。并且通用技能一般只会处理基础伤害行为,而buff可以使得属性的处理更加多样。
BUFF逻辑层主要功能:¶
- 单位附着:施法者、目标、范围(比如在场景中持续存在)、子弹等。
- 延时作用:等待一段时间后再开始生效。
- 目标判定:检测敌方、友方、全体、范围等等,施加效果
- 间隔计时:在计时期间持续触发(持续性回血、DOT伤害等)。
BUFF 逻辑单元¶
BUFF的逻辑单元比技能简洁一些。只需按照:【构造->初始化->更新->反初始化】 这一套执行即可。
- 一些buff信息的缓存数据
- 构造函数:用于获取buff的信息(起源目标,作用目标,起源技能,BUFFID、特别参数等)
- LogicInit初始化函数:通过BUFFID拿配置,对BUFF进行初始化。
- LogicTick逻辑更新:进行BUFF状态转换和具体BUFF逻辑实现。
- LogicUnInit反初始化
BUFF状态转换¶
BUFF可以抽象为下面五种状态,理解下面五种状态就可以理解BUFF的功能,然后放在LogicTick处理功能就好。
五大状态: - None:BUFF完全失效,无需逻辑处理,此时可用轮询去除。 逻辑更新处理LogicTick(): - Delay:延时触发 - Start: - 处理BUFF开始单次触发的逻辑 - 判断BUFF时效(单次、限时、永久),转换到不同的分支 - Tick: - 制作间隔触发逻辑 - 保持计时,判断是限时还是永久最后进入不同分支 - END:BUFF结束逻辑,进行资源清理和属性回调,清理结束转为None。
BUFF 管理¶
已经开始运行的BUFF类存储在主逻辑单元的技能模块MainLogicSkill中,用一个List来作为容器。 - BUFF插入:创建buff时,需直接加入List - 逻辑执行:逻辑帧每帧轮询状态,执行LogicTick逻辑。 - 删除BUFF:轮询检测到None,触发LogicUnInit,并从容器中将BUFF移除。
被动BUFF¶
逻辑单元配置新增一个数组,用来专门存储被动BUFF,被动在单位初始化后就应该永久存在。 - 初始化时机:在技能系统初始化阶段和其他技能一起初始化。
BUFF添加流程¶
写BUFF多看看这个流程,别找来找去的了。
- 写Buff配置派生类:如果需要新增字段
- 设置一个BUFF配置
- 写Buff逻辑类
- 根据ID获得BUff配置:在ResSvc的GetBuffConfigByID添加,绑定ID和配置关系
- 添加Buff逻辑类 :在ResSvc的CreateBuff添加,绑定Buff枚举和Buff逻辑类关系。
全局通用BUFF¶
有些buff是全局所有角色都要随时调用的,那我们直接定义到全局常量表中
1. 技能朝向索敌--【移动攻击BUFF】¶
- 全局配置:设置一个较大的BuffID如90000到Constant全局常量表中。其他如buff配置结构还是按照正常配置进行
技能逻辑: - 找目标判距离:先拿到离自己最近的敌方目标,检测其是否在搜索距离内。 - 激活移动攻击:设置一个bool用来判定激活, - 结束移动攻击 - 移动攻击逻辑:如果在搜索距离内,就发送朝向目标的位移指令 -
一些常见BUFF¶
1. 正面/负面状态--【状态BUFF】¶
- 状态枚举:提供一个状态枚举存储
- 状态计数:在Attrs属性中设置相应的状态计数
- 状态改变回调:当任一状态发生改变时,设置状态事件(比如更新表现层UI显示)
- 属性检查计数:
- 有计数:一些状态需要将移动归零、禁止移动操作或者位移(比如击飞),用来模拟控制效果,继续启用该负面状态
- 计数为0:则取消对应状态,将位移回复。
虽然直接设置了位移,但是表现层还是会进行插值,看到的效果是缓慢击飞。
- 状态BUFF实现:开始和结束时增减某个状态计数就OK
2. 强化技能实现--【技能替换BUFF】¶
亚瑟宝剑大加强! 强化之后改数据、改逻辑?太麻烦! 直接做个新技能配置替换了!
- 新配置技能ID不变:还是和以前保持一致。这是为了避免其他逻辑获取BUFF时因为替换导致识别出错。
- BUFF逻辑实现
- 在技能逻辑类提供切换技能的函数:获取配置,修改技能属性。
- 计时结束End:自己将技能改回去
- 技能释放成功回调:注册函数,回调了是普通就触发end将技能改回去。
3. 目标标记效果--【标记BUFF】¶
本质上就是给目标的事件增添一个标记效果函数~
以标记加伤效果为例: - 标记效果:如收到buff的固定伤害(注意伤害绑定事件则需要取消再次回调OnHurt,避免循环回调)。 - Start时:buff目标将标记效果注册到事件(如OnHurt) - End时:取消标记效果在事件的注册。
4. 群体效果--【动态范围buff】¶
一般分为两种: - 以buff持有者owner为中心 - 以目标地点为中心
本质上也只是拿到实体列表动态搜索一遍加入到目标列表 - 效果实现:对目标列表逐一添加效果。
5.攻击吸附--【移动攻击BUFF】¶
如果目标在玩家的搜索范围里,攻击范围外,玩家的攻击最好能跟随目标移动,以实现良好的手感。