Unity MMORPG 背包系统如何设计

devtools/2024/10/15 17:51:17/

MMORPG游戏中背包系统是很重要的一个模块, 大部分的背包系统的讲解,都是讲如何设计UI,如何显示这些,其实这些东西并不是背包系统的核心,接下来我们来分析一下背包系统的数据结构如何设计,能让策划和程序很好的工作,以及非常方便的扩展。

 1: 设计好背包系统的关键是什么?

背包其实就是描述一个玩家在游戏世界当中拥有哪些物品,一个大型的MMORPG游戏会有很多的装备和物品, 这些装备和物品以及数值经常会修改,增加,减少, 甚至装备上可以镶嵌各种宝石来实现不同的攻击和防御。所以如何设计一套数据组织的方式能方便程序和策划沟通,才是做好背包系统的关键,并不是如何做好背包系统的UI界面。

2: 背包系统物品需求分析

  背包系统中的物品分为2个部分,第一部分是物品的属性描述,第二部分是玩家在游戏里面拥有物品的数量,第一个部分就是策划要填写的内容,有哪些物品,这些物品会有哪些属性等,同时程序在使用装备的时候, 去读取里面的数据属性值来参与程序计算。第二部分就是程序要做的事情,当玩家在游戏中获得了某个物品或装备的时候,就更新装备的数量到数据库,程序负责维护好这个数据逻辑。

3: 如何设计好背包物品的数据属性配置

背包物品的数据属性一般是由策划来处理的,我们要设计好一种方式来让程序和策划很好的工作。

策划负责填写表格,程序负责使用表格。如何设计好呢?我们可以把物品分成一些类型,比如药水类型,红蓝药水能够增加玩家的HP与MP。又如装备类型,某个装备有攻击力,防御力等。这么多物品,很容易让程序员懵逼,这么多类型与复杂数据属性如何设计呢?其实仔细分析一下,我们很容易把内在的逻辑设计清楚。

   先来分析一个物品的描述,一个物品在逻辑上包含了两个部分,第一部分是文字描述,如"红药水可以增加玩家的200HP",第二部分属于数值描述比如药水类物品的数值[HP, MP, 售价等]。那么我们就可以设计药水的属性配置表如下:

   物品id      desic(文本描述)        HP,  MP,   BuyPrice[购买价格],  SellPrice[出售价格]

那么如果是装备呢?装备是防御力,攻击力等属性,药水的描述就不适用了,我们就要建立另外的描述表如下:

   物品id     desic(文本描述)     Attack    Define  BuyPrice[购买价格], SellPrice[出售价格]

这样我们很自然的按照物品的数值属性进行物品分类,把每一类物品做成属性描述表,例如药水描述表,装备描述表,武器描述表, 可以根据游戏的需求,定义一类物品的属性。

  这些属性配置表在做背包显示的时候,能提示物品的属性和特点,在计算数据的时候能叠加他们的数值到游戏中。策划随时可以增加物品类型,修改物品的属性,增加后马上就可以使用,这样程序和策划就能很好的沟通,策划做数值也方便。

  物品id 是对应的此物品唯一的ID号,背包里面, 我们都是以id号来标识物品的,那么给特定一个ID号,如何知道到底是那种类型呢?这里有一个技巧,就是我们把每种类型的物体的ID划分一个范围,比如药水, [100001~199999], 武器[200001~299999], 衣服装备[300001~399999]。这样规定好以后,当知道某个物品的ID,我们就可以通过 ID整除100000 类型, 300001/ 100001 = 3 所以300001属于衣服装备。

4: 程序如何存放玩家拥有的物品?

  一般游戏里面会做一个数据表存在服务器上, 这个数据表描述了某个玩家有哪些物品以及物品的数目。数据表的设计如下:

    PlayerID(玩家ID)   ItemID(物品ID)   Count(物品数目)  

    00001                     300001                   5

    00001                     200005                  15

当我们要显示00001玩家背包数据的时候,可以通过查询语句把所有的 00001玩家的所有的物品以及数量拉取下来(Select * from 背包数据表 whre PlayerID = 00001 and Count > 0) ,再加上配置表的属性描述等,这样背包就做好了。  

   这里还有一个问题, 有些特殊的装备,可以镶嵌不同的宝石,得到不同的攻击力和防御力,  这种我们怎么做呢?而镶嵌宝石,是玩家操作处理的,这个时候,我们可以在后面再加一个属性表, 用来存放我们配置好的宝石等数据 json文本或二进制数据,如 { 卡槽1: 宝石1, 卡槽2: 宝石3 }。

数据表变成:

       PlayerID(玩家ID)   ItemID(物品ID)   Count(物品数目)   Props(JSON or 二进制)

这样设计后,我们游戏的物品与背包设计就变得非常的简单和清晰,希望今天的分享对大家有所帮助。


http://www.ppmy.cn/devtools/126277.html

相关文章

深度学习模型新手入门指南

深度学习模型新手入门指南 近年来,深度学习已经成为人工智能和机器学习领域的热点话题。作为一种模仿人脑结构的计算模型,深度学习在图像识别、自然语言处理等诸多领域展现出了强大的能力。本指南将帮助新手理解深度学习的基本概念和技术要点&#xff0…

无需复杂计算!如何用“加法”打造高效而低功耗的语言模型

当我们聊到人工智能特别是语言模型时,大家脑海中可能浮现的都是庞大的计算能力、高能耗的服务器群。然而,最近有一篇有趣的论文《Addition Is All You Need for Energy-Efficient Language Models》(加法才是低能耗语言模型的关键)却颠覆了我们对语言模型的传统认知。那么,…

Linux 安装部署及使用Containerd容器管理工具 ~ 保姆级

目录 实验环境: (1)一台centos7.6 (2)关闭防火墙和selinux (3)可以连接外网 (4)配置公网仓库 1.部署containerd服务 (1)安装yum-util (2)添加阿里云 docker仓库 …

spring:Springboot3使用模版引擎thymeleaf

文章目录 介绍语法1、文本替换2、属性替换3、条件判断4. 列表循环5. 表单处理 基本示例视图解析机制视图解析器的默认配置为什么用Controller可以,用RestController就只是返回字符串 介绍 Thymeleaf 是一个现代的服务器端 Java 模板引擎,用于在服务器端…

优化神经网络的计算密集度

在神经网络模型设计和优化过程中,计算密集度低的模型容易导致 GPU 或其他硬件资源的利用率低下,从而影响训练和推理效率。为了解决这一问题,我们可以从多个角度入手,提升计算密集度,最大化硬件利用率。本文将总结如何优…

天通智能平板|智能移动终端|三防|单兵|平板|智能三防手持终端

全星魅科技推出的这款5G天通智能机是属于行业高端配置机型,CPU八核2G,内存8G128G,应急通信流畅操作不卡顿;电池15200毫安时超强续航(是其他常规机子的2倍);屏幕坚如磐石,抗压抗摔&am…

Qt运行报错QWidget: Must construct a QApplication before a QWidget

报错文件为widget.cpp,原代码如下&#xff1a; #include <memory>QLineEdit *frequency new QLineEdit();QComboBox *cbBox_method new QComboBox();QLineEdit *X_MAXvalue new QLineEdit();QLineEdit *Y_MAXvalue new QLineEdit();QLineEdit *X_MINvalue…

Linux块设备驱动实验

直接参考【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 本文仅作为个人笔记使用&#xff0c;方便进一步记录自己的实践总结。 前面我们都是在学习字符设备驱动&#xff0c;本章我们来学习一下块设备驱动框架&#xff0c;块设备驱动是Linux 三大驱动类型之一。块设备驱动要远…