跳转至

帧同步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】

如果目标在玩家的搜索范围里,攻击范围外,玩家的攻击最好能跟随目标移动,以实现良好的手感。

Comments