立即注册找回密码

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

手机动态码快速登录

手机号快速注册登录

搜索

图文播报

查看: 226|回复: 0

[讨论] 11、如何实现一个灵活、通用的战斗(技能)系统——技能执行体和时间轴编辑器

[复制链接]
发表于 2025-5-30 17:14 | 显示全部楼层 |阅读模式

登陆有奖并可浏览互动!

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录 手机动态码快速登录

×
GitHub仓库地址:

<hr/>我们知道一个具体的技能其实是由几种不同的数据组成的
首先最基本的就是存储的技能数据
SkillData

比如你学习了一个火球术,只有1级,那么角色的能力列表就会添加进一个SkillData,里面存储着这个技能的Id是火球术Id,等级是1级,这些数据会存到数据库中,会被玩家改变,比如升级等
SkillConfig

还有一部分是配置在配置表里的技能信息SkillConfig,如技能名称、技能描述、技能CD、技能效果、效果参数等,这些是不会被玩家改变的,比较固定的数据
SkillAbility

SkillData和SkillConfig都是序列化的数据,存储在硬盘上的,但我们游戏的运行时通常需要再构造一个运行时的对象SkillAbility,缓存住从硬盘上检出的SkillData和SkillConfig,以及一些运行时的技能状态数据,比如是否被禁用,当前技能是否处于冷却中,还剩多少冷却时间可以使用技能等
SkillExecution

SkillAbility里存的都是一些状态数据,是一直挂在角色实体上的。技能还有一部分释放表现相关的行为数据,只有在技能释放的时候才创建,技能结束就销毁的,这个就是我们运行时会创建的另一个对象SkillExecution技能执行体。执行体按时间线性运行,按时间逐个执行每个技能效果(触发伤害、生成碰撞体等)
一般一些简单的技能表现可以直接写到SkillConfig上,但如果涉及到比较复杂的技能表现,表格就不太方便,比如一些不规则的弹道,像皎月的q,或者是多个飞弹和弹道,像寒冰的万箭齐发
ExecutionLinkPanel

这个时候就需要一个技能编辑器来可视化编辑这些碰撞体和弹道轨迹,这个技能编辑器在EGamePlay里就是ExecutionLinkPanel,他是一个运行时编辑器,需要打开对应场景ExecutionLinkScene运行才能用(为什么不用离线编辑器?因为做起来比较麻烦,运行时编辑器简单也能用,而且运行时还能模拟技能实际的表现效果,包括数值、伤害、buff等)




ExecutionObject

这个编辑器编辑的数据会保存为一个序列化的ExecutionObject,而每一个时间轴轨道或者称之为执行片段会保存为一个个ExecuteClip挂在ExecutionObject上。当创建SkillAbility时也会缓存住从硬盘上检出的ExecutionObject,并在角色释放技能时通过解析ExecutionObject和ExecuteClip来创建临时的SkillExecution,由SkillExecution来执行具体的技能表现效果


ExecuteClip

ExecuteClip可以称为执行片段,执行片段有5种类型:

  • CollisionExecute(执行技能碰撞体的生成和运行轨迹)
  • ActionEvent(执行事件,比如触发技能效果)
  • Animation(执行技能动作)
  • Audio(执行技能音效)
  • ParticleEffect(执行技能特效)
其中CollisionExecute和ActionEvent是最为重要的,直接构成了整个技能的效果和表现,余下的3个只是表示技能的一些视觉效果


总结

以上即走完了一个技能的全部流程,由此可以总结出在EGamePlay里一个技能最多可由5个部分组成,分别是:

  • SkillData
  • SkillConfig
  • SkillAbility
  • SkillExecution
  • ExecutionObject
按数据分的话SkillAbility、SkillExecution为运行时的数据对象,其中SkillAbility是常驻对象,SkillExecution是临时对象
SkillData、SkillConfig、ExecutionObject为序列化的数据对象,其中SkillData是数据库数据,SkillConfig、ExecutionObject是配置数据
按类型分的话SkillData、SkillConfig、SkillAbility为技能状态相关的
SkillExecution、ExecutionObject为技能表现相关的
<hr/>最新完整的demo和代码在github仓库可取得
https://github.com/m969/EGamePlay

原文地址:https://zhuanlan.zhihu.com/p/682018276
楼主热帖
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册 微信登录 手机动态码快速登录

本版积分规则

关闭

官方推荐 上一条 /3 下一条

快速回复 返回列表 客服中心 搜索 官方QQ群 洽谈合作
快速回复返回顶部 返回列表