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

相关文章

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX