两年磨一剑,梦似已实现

2018年5月,我正式接触Unity游戏开发,学习了一段时间的Unity基础后,开始接触设计模式,游戏框架等知识,在此过程中,数次听到他人谈论战斗系统等相关内容,因为我自己玩Moba游戏多一点,对此也是非常感兴趣,几乎他们每次讨论我都在学(kui)习(ping)。虽然一开始从别人那里学到了很多新的概念和做法,比如Excel表可以导出数据给游戏用,但总感觉他们讨论的开发技能的方法不够灵活。直到有一次我在ET框架游戏交流群听到了群主基于行为树的技能系统的概念,虽然只有寥寥几句,但当我搜索了一下行为树后,我激动万分,没错,这正是我所追求的极致。

在网络上搜索相关关键字却一无所获,但是顺带搜索到了《守望先锋》技术团队在GDC2017分享的三部曲,其中技能系统和网络同步的相关内容让我受益匪浅,我的很多设计就是借鉴了其分享内容,知识积累已经差不多足够我去完成这个大工程了,心意已决,开干!

2019年4月,我创建了仓库,并取名为NKGMobaBasedOnET(之所以叫这个名字原因有二,其一高中开始一起玩LOL的同学们昵称前缀是NKG,其二项目是基于ET框架开发的),提交了第一条Commit,决定开辟一条属于我的道路。

2020年12月,在我提交最后一条战斗系统相关Commit后,看着600多条Commit,完整的技能开发工作流以及可运行的Demo,感觉到了前所未有的放松和成就感。这也差不多就是我当前水平所能达到的极限,所以决定暂时为它画上句号,等日后技术精进再来淬炼。

那么在现阶段这个项目具体包含哪些内容呢?

  • 基于可视化节点的技能编辑器,用行为树的形式配置一个技能从释放到CD的全过程,同时技能产生的Buff数据也在此编辑器配置,但它是额外数据,不属于行为树的范围,更加详细的说明会单独放在这个分类文章中,可导出技能数据为二进制供客户端/服务端使用,运行时反序列化重建行为树和技能数据
  • 行为树基于开源库NPBehave魔改,基于事件的行为树提高了运行时性能
  • 基于可视化节点的碰撞关系编辑器,可导出碰撞关系数据为二进制供客户端/服务端使用,运行时反序列化获取碰撞关系数据
  • 碰撞体编辑器,可导出碰撞体数据为二进制供客户端/服务端使用,运行时反序列化获取碰撞数据
  • 基于Box2DSharp的2D物理引擎碰撞,用于在服务端处理碰撞逻辑
  • 完全节点化的功能封装,提供自定义节点生成工具用于生成节点代码,然后在可视化编辑器中进行节点的创建和连线
  • 提供战斗系统的各个基础模块,如Buff系统,状态系统,数值系统,寻路系统,动画系统,网络同步等,各个模块我都会专门写一篇文章来说明
  • 渲染和逻辑完全分离,基于状态同步的网络同步机制,全部逻辑都在服务端进行,客户端只负责进行渲染工作,但预测和回滚处于TODO状态,预行方案完全参照守望先锋的状态帧同步的预测回滚
  • Demo:按照LOL中的英雄“诺克萨斯之手”为蓝本制作的3个技能,被动和普通攻击用于演示整个战斗系统

这个系列文章动笔的时候,是2021年2月,估计最后封笔差不多会在4月份,距离初次Commit差不多已经过了两年了,尽管不是每天都在Commit,但我确实是一直都在思考要怎么做,可以更好一点。(事实上我觉得正是这样才正常,因为我本身没什么这方面的经验,网上也几乎找不到这方面的资料,是一点点摸索出来的,所以卡壳很正常,也正因如此,我可以保证这个仓库是优秀的。)

我之所以把写文章的时间也算进去,是因为我觉得这个提炼总结与分享的过程同样是我战斗系统的一部分,希望本系列文章和开源库中的代码可以帮助到想要学习开发战斗系统的同好。

我会尽量以项目开发的时间线叙述整个技能系统,让大家感受这个系统从无到有的过程,感觉会更加容易理解一点。

为了避免歧义,我先说一下我对战斗系统和技能系统的理解,严格来说技能系统被包含于战斗系统中,战斗系统还包括Buff系统,状态系统,数值系统,寻路系统,网络同步,但是这些模块和技能系统联系的也很紧密,所以我对于战斗系统和技能系统区分的不是很开,而且我个人也不是很喜欢非得给一个东西一个严格的定义,只要大家能够理解我的意思就OK了,欢迎大家提出自己的观点,共同讨论,共同进步!。

另外,本周末(6月6日 20:00)我将会在B站直播讲解这个技能系统,感兴趣的朋友不要错过嗷:哔哩哔哩直播,二次元弹幕直播平台

本文是此系列文章的前言和汇总目录!

最后给出仓库链接和项目相关截图

仓库链接:https://gitee.com/NKG_admin/NKGMobaBasedOnET

技能编辑器与战斗相关截图:

image-20210601143622540
image-20200722084012352

目录部分

番外

这个部分是陈列了项目开发过程中我学习的一些理论知识,自己的一些思考和总结,以及战斗系统中其他细节功能模块的实现,有兴趣的可以康康。

战斗相关

编辑器拓展相关

行为树相关

寻路相关

特效相关

基础设施