Unity背包系统的完整实现(基于MVC框架思想)
前⾔:
项⽬源码上传GitHub:
背包系统:
背包系统是游戏中⾮常重要的元素,⼏乎每⼀款游戏都有背包系统,我们使⽤背包系统可以完成装备栏的数据管理,商店物体的数据管理等等⼀系列的功能,如何做好⼀个背包系统呢,来学习把!
本次案例是基于数据本地存储的⽅式设计的背包系统,⾸先在数据管理⽅⾯,使⽤ScriptableObject类来实创建数据仓库,可以保存在游戏系统中,重新开始后依旧可以再次加载出来该数据:
前期规划:
为了使得游戏逻辑简洁清晰,可以使⽤MVC框架完成背包系统的设计,来尽量降低数据、逻辑耦合,提升不同的模块的独⽴性。便于程序的扩展和维护
什么是MVC:
M即Model(模型)
V即View(视图)
C即Control(控制)
⽽使⽤MVC的⽬的就是将M和V进⾏代码分离,便于逻辑区分
背包系统要实现的是,存在于背包内的物体可以显⽰在UI上,⽽背包内物体是动态变化的(减少或增加),所以UI可以根据这种变化⽽进⾏动态的变化,所以我们划分为如下区块:
⾸先是M(业务模型):我们通过ScriptableObject类创建数据仓库来构造业务模型
然后是V(⽤户界⾯):通过UI界⾯显⽰背包内所有物体
最后是C(逻辑控制):获取数据仓库模型并转换到UI界⾯
UI端:
⼀、UI搭建
创建⼀个Panel作为背包系统中所有物体的⽗元素,并为其更换⼀个背景图⽚,这样可以使得物体有容纳的空间,能够使得物体更加序列化,更规整:
接下来需要对MainGrid添加组件Grid Layout Group组件,该组件的作⽤是可以是的⼦元素按照⼀定的格
式排列在⽗元素中,这样就很容易使我们动态的显⽰出不定长的UI元素同时保持规整的效果,
关于Grid Layout Group的具体作⽤和使⽤⽅式可以查看之前⽂章:
为了使得添加的⼦物体可以完美的匹配的每⼀个格⼦中,需要调整Grid Layout Group组件的相关参数,⽽其中主要是padding,Call Size和Spacing三个元素,这三个参数调整的具体内容为:
Padding:类似⽹页设计内边距
Cell Size:组中每个布局元素要使⽤的⼤⼩
Spacing:布局之间的元素间距
最终达到这样的效果,每添加⼀个图⽚⼦元素,则向后排列⼀位,这样可以完美的显⽰在格⼦之中:
⼆、格⼦元素预制体制作
为了使得背包内的物体可以在UI中显⽰出来,需要将这些物体做成对应的UI元素,⽽UI元素则有两个关键点,图标和数量,为了实现这样的效果,⾸先创建⼀个Image命名为GridPrefab作为图标,然后为其
添加Text⼦元素作为物体数量显⽰框:
在游戏中,我们只需要为GridPrefab的Image组件中的Source Image添加图⽚,即可实现最终的显⽰效果,制作完成后将GridPrefab拖⼊到Assets中即可创建⼀个预制体
由于我们需要在使⽤预制体时,需要修改其⼀些信息,⽐如说Image组件中的Source Image添加图⽚和⼦元素Text中的显⽰内容(物体个数),为了⽅便更改,使⽤⼀个脚本整合这些需要修改地⽅,⽅便其他脚本调⽤,脚本命名为Grid,并挂载到GridPrefab上:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Grid : MonoBehaviour
{
网页设计padding是什么意思
public Image gridImage;
public Text girdNum;
}
挂载完脚本后,将组件或元素拖⼊:
数据端:
⼀,基于ScriptableObject本地保存数据
ScriptableObject可以⽤来创建不需要挂载到场景物体上的脚本,这样可以将游戏数据保存于本地,不会在每次游戏结束时重置数据,我们可以利⽤这⼀点来设计出数据的存储仓库关于ScriptableObject的⼀些细节可以查看该⽂章:
创建⼀个存储物体数据的仓库,我们可以使⽤CreateAssetMenu来完成创建AssetMenu的⽅法,这样就可以使⽤Create来在资源中创建定义的仓库
具体操作流程:
1,物体数据仓库创建:
⾸先创建⼀个类Item(⽤来创建⼀个物体(⽐如说⼀件武器)数据存储仓库)继承于ScriptableObject,既然是背包物体,需要存储的数据主要是UI显⽰需要的图标图⽚,物体名称和物体数量,以及物体的详细信息(本案例⽤不到)等:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//实现可以在Asset窗⼝创建资源⽂件的⽅法
[CreateAssetMenu(fileName ="New Item",menuName ="Bag/New Item")]
public class Item : ScriptableObject
{
//物体名、需要在UI中显⽰的图⽚、持有物体的数量、物体信息的描述
public string itemName;
public Sprite itemImage;
public int itemNum;
[TextArea] //改变输⼊框格式,提⽰输⼊框容量
public string itemInfo;
}
完成脚本后保存,在Asset⾯板右键创建,即可看到New Item选项,点击可以创建⼀个物体数据仓库,并且可以填写其中的信息,也可以通过脚本来修改信息,并且是永久保存的创建⼀个数据仓库:
修改数据仓库信息:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论