美文网首页
UGUI 背包-数据类的构建以及存储功能的实现

UGUI 背包-数据类的构建以及存储功能的实现

作者: Levi_Wan | 来源:发表于2016-12-26 01:41 被阅读1278次

UGUI 背包

首先我们要做背包,那就肯定需要存储一些信息,比如装备的功能,装备的描述,装备的数值等。
  在公司里,一般都是从服务器中获取信息并以解析CSV,Excel或者JSON的形式来获取保存的信息。
  所以首先我们应该构建一个数据类来保存我们的物品Item的信息。

数据类

由于背包中物品的类型有许多种,所以我们首先需要构建一个父类来保存它们作为物品共有的信息。(Item类)

  • Item类只是一个普通保存信息的类所以不需要继承monobehavior实现Unity中的操作功能。
  • 并在其中定义所以物品共有的信息。
Paste_Image.png
  • 并为它添加构造函数,和装备类型的枚举值(Protected 可供子类进行修改)。
Paste_Image.png
  • 接着我们定义相应的子类。
Paste_Image.png

开始UI设计。

  • 在这里首先需要把Canvas Scale缩放的模式改成随着屏幕的大小进行相应的缩放
Paste_Image.png
  • Match属性跟着屏幕的宽度进行改变。

  • 添加一个Panel作为存放Item的容器。并为其中添加适当的Grid作为格子的Prefabs,为了实现排序可以使用GridLayoutGroup组件。

Paste_Image.png
  • 完成我们的背包UI界面的设计,并将我们里面的每一个Grid作为Prefab,方便以后使用。
Paste_Image.png

实现数据的存取。

  设计好UI界面后,现在就该思考如何获得物品以及如何显示出物品。

  首先我们如果想要达到取出物品放入格子中的效果,那我们就需要一个Item物品作为Grid格子下的子物体存在。如图:

Paste_Image.png
  • 这个Item由两个子物体(Name,Image)组成(外层用空物体包裹,设置好Anchors,以便子物体跟随父物体动态的大小改变)。
Paste_Image.png

  做好了Item后将它做成Prefab。我们添加物品的核心就是在格子里创建出Item并根据从数据类Item中取出数据的不同而生成不同的Name和Image显示,我们开始实现。

  • 首先我们需要把从服务器得到的数据加载出来。这里直接使用字典来保存,使用按键来模拟服务器获取数据。我们为我们的Canvas添加KnapsackManager的脚本来控制全局。

  • 使用Dictionary<int, Item>来进行储存。其中int代表Item类中的Id(因为Id是唯一标识不会重复,数据库中的主键),通过Id作为键来存储Item对象。

Paste_Image.png
  • 模拟从服务器中获取数据,定义一个Load方法,并手动实例化对象。(Item的Icon属性作为图片的Path使用)
Paste_Image.png
  • 在Awake中调用。
Paste_Image.png
  • 取得数据之后,我们下一步应该把它显示到Canvas中出来。也就是存储物品在格子中来。
    • 在此之前,我们应该为ItemUI预设添加一个脚本用于定义控制Name和Image显示的接口。
    • 为ItemUI预设添加ItemUI脚本,并为它定义控制Name和Image显示的接口。
Paste_Image.png
  • 在Unity中将Name(Text组件)和Image(Image组件)拖拽为脚本赋值。
Paste_Image.png
  • 作好了接口我们如果想要将物品放入格子中首先需要知道这个Grid中是否已经有物体。只有没有物体的空格子才能存放物体。
    • 我们为我们的GridPanel添加一个GridPanelUI脚本用于获取GridPanel中的格子的状态。
    • 定义一个获取空格子的方法,只要找到空的格子就返回。
Paste_Image.png
  • 将所有格子拖拽赋值。
Paste_Image.png
  • 现在开始将物品存放在格子中,定义一个SaveItem方法参数为(int itemId)通过id从字典中取出Item对象。
    • 首先我们要先判断字典中是否有这个id对应的Value,如果有,我们也首先判断格子是否已经满了。如果没有满则进行物品的储存。
Paste_Image.png
  • 这里将创建物品定义为了一个方法CreateItem。(参数Item为需要存放在格子中的物品,parent为需要存放的父对象)
Paste_Image.png
  • 通过ItemUI脚本中的两个接口为它们显示的图片和物品名赋值。这里的ItemIcon对应着Load中实例化生成物品的item.Icon属性用于保存了图片的路径。
Paste_Image.png Paste_Image.png
  • 使用Resoures.Load方法得到Sprite,并给Image组件的Source Image赋值。
Paste_Image.png
  • 我们的KnapsackManager作为管理使用单例模式。
Paste_Image.png
  • 并在Awake中赋值。
Paste_Image.png
  • 定义一个InputDetector类并它的Update中通过按键生成物品查看效果。
Paste_Image.png
  • 生成物品的效果:
Paste_Image.png

数据的保存

  在格子中存放好物品以后,我们想对位于格子中的物品进行管理,所以我们需要一个格子物品的信息类来进行数据的管理。

  • 和以上一个我们也通过使用字典来进行格子中物品的储存和管理。定义一个字典,格子的名称作为key,格子中的子对象作为Value进行储存。由于是数据类需要频繁的进行取出和储存,我们直接定义为静态。
Paste_Image.png Paste_Image.png

   之后我们就可以通过我们的ItemModel类对格子中的物品进行信息显示,拖拽等操作。

相关文章

  • UGUI 背包-数据类的构建以及存储功能的实现

    UGUI 背包 首先我们要做背包,那就肯定需要存储一些信息,比如装备的功能,装备的描述,装备的数值等。  在公司里...

  • 21UGUI背包系统

    一、UGUI背包系统展示## 二、背包系统的搭建## 三、加载预支物的制作## 四、预支物基类的建立以及各种相应的...

  • UGUI(背包实现)

    实现一个简单的背包功能(可以拖动物体,如果不属于有效范围会自动返回原来父物体的下面) 布局格式 BagPackUI...

  • Redis 工具类

    Redis 工具类 实现的功能包括 redis 读取队列数据,存储和读取 hash 数据,Redis 的创建,Re...

  • TodoList-React

    要实现的功能 localStorage存储数据 使用localStorage存储用户数据,异步更新数据,实现在使用...

  • Builer 设计模式

    Builer设计模式介绍又称构建这模式,Builer功能存储参数。 以添加头部为例 一、创建规则 二、创建实现类 ...

  • Unity-UGUI根据标签宽度实现瀑布流布局--FlowLay

    UGUI如果要实现如上图的布局效果,很可惜,UGUI没有自带这个功能,UGUI的布局无非就是Horizontal ...

  • MySQL引擎

    存储引擎 1、存储引擎其实就是如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法。 ...

  • Unity3D UGUI , 3D物体 拖拽跟随鼠标

    不使用射线实现 拖拽物体以及UGUI主要函数为UGUI RectTransformUtility.Screen...

  • UGUI 使用Toggle组件来实现背包页

    使用Toggle组件来实现背包页 UGUI的Toggle组件也就是单选框。我们可以使用这个单选框来实现背包页。当选...

网友评论

      本文标题:UGUI 背包-数据类的构建以及存储功能的实现

      本文链接:https://www.haomeiwen.com/subject/ynwlvttx.html