开源一个高度可扩展的技能与多层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

相关文章

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

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典型应用场景传统