首页 > 其他分享 >Unity MMORPG 背包系统如何设计

Unity MMORPG 背包系统如何设计

时间:2023-11-14 10:59:06浏览次数:32  
标签:背包 玩家 物品 Unity MMORPG 描述 ID 属性

前言

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

标签:背包,玩家,物品,Unity,MMORPG,描述,ID,属性
From: https://www.cnblogs.com/liuwenyi/p/17831093.html

相关文章

  • Unity Android Studio 设置自启动应用
    前言最近有需求,需把Unity软件发布到android平台后开机启动应用,在网上查了很多资料,现整理如下Unity部分新建项目,平台设置为android tips:需要勾选ExportProject以便于导入AndroidStudio,使用Unity版本为2021.3.32f1AndroidStudio部分 androidstudio......
  • Unity底层是如何处理C#的
    在面试中,我们经常会被问到Unity的底层是如何处理C#,本节给通过一下3个点来给大家详细的分析这个问题:(1) C#的发展历史;(2) Unity为什么用C#;(3) il2cpp解决了什么问题;  C#的发展历史 C#没有出来之前,当时Java凭借Java虚拟机+Java字节码解释执行,让Java代码移植编写......
  • unity LookRotation LookAt 功能详解
    Quaternoin的旋转函数static Quaternion LookRotation(Vector3 forward, Vector3 upwards =Vector3.up); Transform中的旋转函数void LookAt(Transform target, Vector3 worldUp =Vector3.up);void LookAt(Vector3 worldPosition, Vector3 worldUp =V......
  • 背包问题的记忆化搜索写法
     #include<iostream>#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;constintN=1010;intn,m;intv[N],w[N];intf[1010][1010];intdfs(intcuru,intcurv){if(f[curu][curv]>0)retur......
  • unity开发——打飞碟小游戏
    unity开发——打飞碟小游戏目录unity开发——打飞碟小游戏项目地址游戏规则及要求规则要求设计模式讲解代码剖析伪代码DiskDiskDataIUserActionIActionManagerCCActionManagerPhysisFlyActionPhysisActionManagerScoreRecorderUserGUI项目地址https://github.com/goodhuahua/un......
  • Unity 计算圆的切点
    ///<summary>///计算过圆外一点的切点,在圆上的切点///</summary>///<paramname="center"></param>///<paramname="radius"></param>///<paramname="point"></param>......
  • Unity3D 如何基于addressable来做资源管理详解
    前言Unity3D是一款非常流行的游戏开发引擎,其强大的功能和易用性使其成为了众多游戏开发者的首选。在游戏开发中,资源管理是一个非常重要的方面,而Unity3D提供了一种名为Addressable的功能,可以帮助开发者更好地管理和加载游戏资源。本文将详细介绍如何基于Addressable来进行资源管理......
  • Unity DOTS系列之System中如何使用SystemAPI.Query迭代数据
    最近DOTS发布了正式的版本,我们来分享一下System中如何基于SystemAPI.Query来迭代World中的数据,方便大家上手学习掌握UnityDOTS开发。SystemAPI.Query的使用System有两种,一种是Unmanaged的ISystem,一种是managed的SystemBase,这两种System都可以通过SystemAPI.Query来迭代与......
  • Unity 自定义Postprocess 景深和散景模糊
    前言本篇将介绍如何通过添加RenderFeature实现自定义的postprocess——散景模糊(BokehBlur)和景深关于RenderFeature的基础可以看这篇https://www.cnblogs.com/chenglixue/p/17816447.html景深定义:聚焦清晰的焦点前后可接受的清晰区域,也就是画面中景象清晰的范围如下图相......
  • UNITY---huatuo,革命性的热更新解决方案
    最近huatuo(华佗)热更新解决方案火爆了unity开发圈,起初我觉得热更新嘛,不就是内置一个脚本解释器+脚本语言开发,如xLua,ILRuntime,puerts。Huatuo又能玩出什么花样,凭什么会这么NB,引起了那么多程序员的关注与称赞呢?带着这些问题我详细的看了huatuo的资料,阅读了示例项目+huatuo源码......