第七章 背包系统
作为与道具系统关联性较强的系统,背包系统相当于道具系统的呈现层、UI层,也就是说它的底层数据其实由道具系统来驱动。首先作为背包,自己本身不维护道具信息,而是维只维护有几个格子,每个格子里放了什么,放了多少个。
背包系统的基础功能如下:
应为背包实际上是道具系统的UI表现,所以背包的UI是需要制作并要满足上图中的部分功能。因为unity本身ui制作就可以达到某些功能的需求,所以在制作ui时应尽可能利用unity的一些功能模块。
背包系统组成如下:
除了正常的服务端信息配置、客户端背包管理、双端的信息处理、DB字段构建,背包系统第一次涉及了UI的制作。其中BagItem作为背包每个格子的预制体,而UIBag则是背包整体的组成UI。
简图如下:
下面简述一下背包UI的制作:
首先教程的背包将多个背包融合在一个UI上,这里展示了背包1作为随身背包,背包2作为仓库。所以背包间的切换分页十分重要。所以教程依照了一些成熟的分页类实现了自己的分页工具,只需要绑定两个切换按钮和显示页做到分页效果。
而在单层背包页上应用了unity自带的滚动页(scroll view),在其中的content节点下放置多个用于呈现BagItem的格子UI,该功能模块可以将放置在此节点下的游戏物体按一定规律摆放,较为方便实现背包格子的UI摆放。
而BagItem的预制体上由道具的UI图片和一个用于显示的text,绑定了脚本用于动态加载这两个数据。代码如下(以配置中图片名字检索,动态加载):
网络消息和配置、数据与消息同步和之前的系统大差不差,不多赘述。
客户端的主要功能在BagManager中体现,有整理、道具使用、道具丢弃、金钱改变等,以整理为例代码如下:
先遍历道具系统中玩家用于的道具,如果未超出对应堆叠上限,则显示当前数量;否则添加一个满上限的道具Item,且计算数量减去上限,循环这个过程直到跳出循环,执行未超上限的方法。