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

2024-08-27 17:28

本文主要是介绍开源一个高度可扩展的技能与多层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计算了。

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

这篇关于开源一个高度可扩展的技能与多层Buff叠加的双端框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112299

相关文章

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

无需邀请码!Manus复刻开源版OpenManus下载安装与体验

《无需邀请码!Manus复刻开源版OpenManus下载安装与体验》Manus的完美复刻开源版OpenManus安装与体验,无需邀请码,手把手教你如何在本地安装与配置Manus的开源版OpenManu... Manus是什么?Manus 是 Monica 团队推出的全球首款通用型 AI Agent。Man

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结