开源一个高度可扩展的技能与多层Buff叠加的双端框架

在设计项目的技能系统与多层Buff的时候,你可能会遇到如下问题:

多种技能与Buff的计算,各种if else判断揉在一起,无法扩展更多类型,

角色同时有多种不同Buff要对同一属性做加成时,如何设计?

同一类技能,可能某个个别技能要比其它技能多一个操作, 如何设计?

同一类Buff,需要处理多个不同的属性的叠加与消耗, 如何设计?

多技能与多Buff的冷却处理,要支持添加任意类型,如何设计?

如何与策划沟通,是否要做技能编辑器,如何抉择?

… …

对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!

我们开源一套高度可扩展的技能与多层Buff叠加的双端架构(支持Unity,Cocos双客户端), 除了C#的Attribute与TypeScript的装饰器在使用上的差别,导致每类Model的写法有些差异以外,其它我们基本保持一致。

这套框架的主要特点是:

1: 机制,数据,计算规则完全分离。机制提供核心的服务,数据由配置表来驱动,规则模块会被自动识别并关联好。

2: 可以任意添加扩展各种技能类型与各种Buff类型。

3: 技能与Buff支持默认处理规则逻辑外,还支持特定技能Buff的特定规则扩展,满足个别变态需求。

3: 每类技能与Buff的配置表可以完全独立,分开维护,每类数据的参数功能明确;

开源代码:

Unity:

链接:https://pan.baidu.com/s/1G7gUr7F981MBe7rrkRdlUg?pwd=1gyk

提取码:1gyk

Cocos Creator 3.8:

链接:https://pan.baidu.com/s/1t5A7vFqG7Lrne60fmS7z2w?pwd=5ava

提取码:5ava

同时我们也配套了相关的讲解课程:

Unity 技能与多层Buff架构与设计:

精选推荐:如何高度可扩展的技能与多Buff框架

Cocos Creator 3.8 技能多层Buff的架构与设计:

精选推荐:如何打造高度可扩展的技能与多Buff框架

点击”阅读全文”,可以在免费公开课中找到我们的课程讲解。



// step2: 获取公式参数后,带入到buff公式,计算buff加层后的值

// step3: 返回计算出来加成后的值

Return 最后计算出来的buff加层的值

}

目前常用的buff,比如加速鞋等,可以采用这样的方式来处理。

步骤2: 将具体的计算独立于流程外,基于buff ID动态选择计算函数。

为了新加入的buff规则能快速方便的接入到我们的游戏逻辑中,不用改动流程逻辑代码 ,我们可以将具体的计算独立于流程体系之外,根据buffID来动态选择对应的计算buff加成算法。游戏buff计算的逻辑流程中,使用统一的接口CalcBuff来给逻辑流程计算buff,我们编写函数CalcBuff,函数实现中通过buffID来找对应的具体计算函数并调用。对于逻辑流程而言,直接调用CalcBuff即可,而具体的计算规则由每个规则函数自己独立编写,我们只要BuffID找出规则计算函数对象,调用即可。伪代码如下:

int CalcBuff(int skillID, int buffID, Entity entity, …) {

// step1: 根据skillID, buffID,找到对应的计算函数;

var func = SkillBuffCalcMgr.GetSkillBuffCalcFunc(buffID);

// step2: 根据找到的函数对象,来调用具体的计算规则函数

return func(skillID, buffID, entity, …);

}

游戏buff逻辑流程代码中,调用CalcBuff来获取buff的计算结果,具体的计算规则,我们可以将代码编写到独立的模块里面实,新建一个SkillBuffCalcMgr类,Init时,根据Attribute注解扫描所有的buff计算函数,根据ID做好映射。编写接口GetSkillBuffCalcFunc函数,根据buffID来返回它对应的计算函数。每个具体的计算函数,带一个SkillBuffRule注解,让系统扫描的时候识别到它,加入映射表。

Class SkillBuffCalcMgr {

private static Map buffFuncMap;

public static void Init() {

Type t = typeof(SkillBuffCalcMgr);

// 利用反射,遍历所有的静态方法,找出带有SkillBuffRule注解的函数

var func = xxxxxx;

AddFunc2Map(skillID, buffID, func);

}

public static GetSkillBuffCalcFunc(int skillID, int buffID) {

return GetFuncFromMap(skillID, buffID);

}

[SkillBuffRule(20001)]

Public static int CaclSkillBuffRule_20001(int skillID, int buffID, Entity entity, …) {

}

[SkillBuffRule(20002)]

Public static int CaclSkillBuffRule_20002(int skillID, int buffID, Entity entity, …) {

}

[SkillBuffRule(20003)]

Public static int CaclSkillBuffRule_20003(int skillID, int buffID, Entity entity, …) {

}

}

当我们要增加一个BuffID对应的计算规则的时候,只需要加一个注解+函数,例如增加一个ID为20004的buff,只要编写一个计算函数即可,如下:

[SkillBuffRule(20004)]

Public static int CaclSkillBuffRule_20003(int skillID, int buffID, Entity entity, …) {

}

这样系统就能自动识别到20004, 就能在游戏逻辑里面使用20004的buff计算了。

今天的分享就到这里了,我们近期推出了单次咨询服务,包括:游戏创业咨询,项目技术架构咨询等,点击”阅读全文”查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值