使用Unity开发高效的技能框架(1)
- 初心
- 效果展示
- 1、技能配置总览
- 2、主动释放模块
- 3、被动释放模块
- 结语
初心
最初是想着能有一个自己感兴趣的实际项目作为驱动力,不断学习与思考,即使在搬砖似的工作中也不荒废甚至更加精进开发技能。
个人比较喜欢玩RPG类的游戏,就想着我是否能开发出一套像拼积木一样搭建的技能系统,以至于无论什么样的技能类型,最终可以不用写代码只配置就可以完成。当然,先是想着复刻魔兽世界里的一些技能,然后结合一些游戏、动漫、影视作品,发现有意思的游戏进行实现,在这个过程中往往还是需要造积木的模块,以及不断优化。
效果展示
bilibili@百练成圣: Unity复刻魔兽世界BOSS阿兹塔雷克.
当前BOSS战参考了魔兽世界阿兹塔雷克,涉及到debuff、技能打断、阶段转换等机制。以其中一个debuff技能【虚空毒素】来举例:
1、技能配置总览
这是技能基础信息,定义了技能名、技能图标、释放CD、释放类型(选目标还是选地点还是空放)、最短释放距离、技能消耗(default目前是消耗蓝,如果需要消耗其他职业资源可以加)、是否显示读条、释放时是否能旋转移动、能否被打断等等。
2、主动释放模块
主动释放我把它分了几个部分:
(1)Condition:判断技能什么条件下可用,不可用时技能处于灰暗无法点击状态;
(2)Trigger:释放方式,按住蓄力释放,还是点了技能之后选择一个目标点放置释放,还是选择一类(角色、状态等)对象点击释放,等等;
(3)Creator:这就是该技能最终被实例化成什么类型的技能,目前通常时AnimatorCreator也就是基于animatorcontroller为动画控制的技能,也保留了基于timeline或是引用其他实体技能的RefSkill,或是完全自定义的技能实现CustomCreator
在AnimatorCreator中,程序逻辑则是该技能实际产生战斗逻辑的关键,buff、伤害都由此处配置
GameMoment选择PlayerSkillRateTrigger为1代表当前技能释放到100%进度的时候,对SkilltargetData,也就是当前技能释放的目标释放Single单体技能(配合单体免疫类型buff的判定),DamageExpression是伤害表达式树,此处为空则不造成伤害,而是在BattleAdditive处AddStatus,添加一个状态,此状态是
由降低目标造成伤害60%和每秒对目标造成气血上限的5%叠加的复合状态
可以看到这里DamageExpression模块是复用了前面的,所有伤害表达式树均用此类
3、被动释放模块
这个技能由于是纯主动技能,被动模块列表是空的。这里我借用另一个被动技能展示被动模块:
意为当技能释放者攻击时,如果释放的技能有【冰霜】标签,则该冰系技能会对目标附加一个减速效果,持续5秒。
结语
这是该系列的第一篇,无法将整个系统介绍全面只能以其中一个技能配置为例,后续篇章会继续介绍其更深层的实现和想法。
现在面临AI的冲击,工作无论多难找、无论公司要求AI代码覆盖率多少,但这套框架完全古法编程,过去如此将来也一定是。不管新AI时代还有没有能载我的船,我都用心血亲手为它搭建,也希望能够在大家的意见和建议中不断优化、前行。