前言
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 二进制)
这样设计后,我们游戏的物品与背包设计就变得非常的简单和清晰,希望今天的分享对大家有所帮助。
更多视频教学
Unity3D教程www.bycwedu.com/promotion_channels/2146264125