MVC模式简析:

Model:

BackpackConfig.json:存放装备信息

Item:json文件对应的数据模型

View:

Scroll Rect:制作可滑动的背包面板

Grid Layout Group:管理物品的布局

Contentsize Fitter:布局管理

Toggle & ToggleGroup:切换框及其Group

Controller:

ItemManager.cs: 读取json文件并存出到List中。

BackpackManager.cs:显示具体的item。

ItemModel.cs:用来显示物体的背景图片和具体数量等外观。

ItemDetail.cs:点击物体时用来显示其具体信息,如物品描述等

数据模型:

string:name(名称),description(描述),icon(图标),bgIcon(背景图片),

int:id(唯一id),count(数量),quality(品阶,一般分五品),operation(可进行的操作,分解,售卖,合成)

enum:type(武器,碎片,药品))

Json文件(部分示例):

[

{"id":1,"name":"霜之哀伤",

"desc":"这是一把剑","icon":"",

"bgIcon":"", "count":,

"quanity":1,"oper":,

"type":},

{"id":2,"name":"火之高兴",

"desc":"","icon":"",

"bgIcon":"","count":,

"quality":2,"oper":,

"type":}

]

Json的语法规则:

数据在键值对中

数据由逗号分隔

花括号保存对象

方括号保存数组

Json在unity中的使用:

LitJson是一个Json的开源项目,比较稳定,推荐使用。

下载:

官网:http://lbv.github.io/litjson/下载LitJson.dll

(网盘链接:http://pan.baidu.com/s/1i57ozml 密码:eyd4)

导入:

把LitJson.dll放在unity项目的Assets-Plugin目录下(如果没有自行创建)

引入命名空间:

using LitJson;//导入LitJson

脚本文件示例:

public enum ItemType (枚举类型,用来定义物品的类型,提高代码的可读性){

Unknow = -1,

Equip,

Medical

}

Item.cs(物品实体类):

成员字段:

数据模型里的内容,访问修饰符为public

构造函数:

public BPItem(string name,string desc, string icon, string bgIcon,int id,int count,

int quality,int oper,int type)

成员函数:

public void TransType(int type){

//用switch语句把int类型的type转换为ItemType类型

}

ItemManager.cs(不用继承MonoBehaviou):

命名空间:

using System.IO;

using System.Text;

using litjson;

成员字段:

private static ItemManager instance;//单例

public List itemLists;//item实体类集合

public JsonData itemData;//用来接收读取的json文件的数据类型

成员函数:

public staitc ItemManager Instance{get{}};//单例

public void LoadItemConfigData() //加载Json文件并初始化List

{

if (this.itemLists == null) {

this.itemLists = new List();

}

string url = Apllication.dataPath+"在unity中的文件路径";

configJData = JsonMapper.ToObject(File.ReadAllText(str, Encoding.GetEncoding("GB2312")));//加载Json文件

}

public void DecodeConfig() {//解析JsonData为List

for (int i = 0; i < itemData.Count; i++) //遍历访问itemData的内容

{

int id = (int)itemData[i]["id"];//强制转换为int类型

string name = itemData[i]["name"].ToString();//转换为string类型

Item item = new Item();//实例化一个Item实体类

itemLists.Add(item);//添加到itemLists

}

}

BackpackManager.cs(显示具体的背包物体,挂载在BackpackPanel上){

private List itemLists;//声明一个List存储ItemManager中的itemLists

//在命名空间引用UnityEngine.UI

//声明item和ScrollRect组件,并在unity里拖曳赋值

public Transform itemTrans;

public ScrollRect itemScrollRect;

//获取ItemDetail类,可以在unity中拖曳赋值

ItemDetail itemDeatil;

//在Awake函数中调用ItemManager单例调用加载函数

void Awake() {

ItemManager.Instance.LoadItemConfigData();//调用ItemManager中的加载方法

ItemManager.Instance.DecodeConfig();//解析Json

this.itemLists = ItemManager.Instance.itemLists;//获取itemLists对象

}

//在每次启用时调用,MonoBehaviou的OnEnable()函数可以在一个程序中重复调用

private void OnEnable(){

CreateAllItem();

}

//创建一个具体的item

private GameObject CreateItem() {

//实例化一个item,并设置父节点为ScrollView组件下的content

GameObject go = Instantiate(this.itemTrans.gameObject, this.itemScrollRect.content);

return go;//返回一个GameObject

}

//创建全部的item

private void CreateAllItem() {

//遍历集合里的item并创建相关的item

for (int i = 0; i < this.itemLists.Count; i++){

Item item = itemLists[i];

GameObject go = CreateItem();//调用CraterItem函数创建一个item

ItemModel model = go.GetComponent();//获取item身上的ItemModel脚本,后文会提到

model.SetData(item);//调用ItemModel里的SetData方法用来管理物体的背景图片,数量等可视属性

//获取item身上的Button组件,动态添加点击事件,当点击item时显示该物体的详细信息面板

Button btu = go.GetComponent();

go.AddListener.OnClick(()=>

this.itemDetail.SetDetail(item);//使用Lamda表达式动态添加

);

}

}

}

ItemModel.cs(挂载在item上,用以管理物体的背景图片,数量等可视属性){

//提供显示item的模板样式,引用UnityEngine.UI命名空间,可在unity中拖曳赋值

public Image bgIcon;

public Image icon;

public Text count;

public GameObject isChip;

public void SetData(Item item) {

if (item == null) {//安全校验

Debug.Log("item = null");

return;

}

//更改背景图片和物体数量

this.item = item;

this.count.text = item.itemCount.ToString();

this.icon.sprites = Resources.Load("图片在unity中的存储路径"+item.itemIcon.ToString());//获得物体图片的路径

this.isChip.SetActive(item.itemType == BPItem.ItemType.Chips);

}

}

ItemDetail.cs(用来显示物品的详细信息,挂载在详细信息面板上){

//引用UnityEngine.UI命名空间,可在unity中拖曳赋值

public Text detailText;

public void SetDetail(Item item){

if(item == null)

return;

this.detailText.text = item.desc;

}

}

unity 背包选中_Unity背包系统实现相关推荐

  1. Unity学习日志_Unity父子关系与Camera

    Unity学习日志_Unity父子关系与Camera ​ 本次组件简单介绍将不包含monoBehaviour类及其向上回溯的父类. 1. 关于父子物体 ​ 首先需要声明的一点是所有游戏物体的Trans ...

  2. Unity学习日志_Unity地形系统简介

    Unity学习日志_Unity地形系统简介 地形创建: Terrain中的组件: Transform Terrain 四大功能: paint Terrain,可以选择下面几种具体的模式: Create ...

  3. unity 实现文本选中_Unity中如何读取TXT文本内容

    在游戏开发过程中,我们是离不开需求的,而需求的事情是由策划来做的,那么我们和策划也是需要沟通交流的,那么是怎么交流的呢?策划不需要写代码,只需要思考一些游戏的内容,数据,玩法的实现,然后让我们按照策划 ...

  4. unity 获取选中的目录_Unity的目录管理

    Assets目录 在一个 Unity 3D 项目中,通常会有大量的模型.材质以及其他游戏资源,所以需要将游戏资源归类到不同文件夹做分类管理. 其中有一些特殊的目录名称会被Unity识别,它们有不同的特 ...

  5. ugui unity 取消选择_Unity暑期萌新入门:环境篇

    大家好,新一期又跟大家见面了. 上一节我们完成了角色的移动控制,然而John只能在空白的场景中移动.因此接下来这一节我们将添加关卡.调节光照,让John来到阴森的鬼屋.然后设置NavMesh(导航网格 ...

  6. unity 平移图片_Unity 两张背景的切换平移

    两张背景图片向左移动,当屏幕看见的时候. 使用的是Unity自带的Sprite,当然也可以使用NGUI Sprite using UnityEngine; using System.Collectio ...

  7. unity算法面试_Unity面试题汇总

    <Unity面试题汇总>由会员分享,可在线阅读,更多相关<Unity面试题汇总(52页珍藏版)>请在人人文库网上搜索. 1.一. C#语言1. 重载和重写的区别1) 所处位置不 ...

  8. unity 发光字体_Unity 游戏开发技巧集锦之创建自发光材质

    Unity 游戏开发技巧集锦之创建自发光材质 Unity游戏开发技巧集锦教程大学霸内部资料 创建自发光材质 自发光材质(self-illuminated material)是指自己会发光的材质.生活中 ...

  9. Q Inventory System unity背包物品插件 使用笔记

    Q Inventory System 一个非常不错的背包物品插件 功能很完整,用起来简单.但是作者好像很久没更新了 网上相关教程也比较少,用户手册上的内容版本对不太上了.我在此记录一下学习摸索的过程, ...

最新文章

  1. Rancher前奏--配置Nexus
  2. 关于操作系统中进程、线程、死锁、同步、进程间通信(IPC)的超详细详解整理
  3. Eclipse使用SVN
  4. Spring Boot----Dubbo原理分析
  5. 85岁院士的新年浪漫:这大概是最美好的爱情
  6. Spring初始化:org.springframework.we...ContextLoaderListener的作用
  7. caffe 使用cudnn 加速报错
  8. 5.Struts2配置形式,覆盖
  9. Linux 中安装软件报缺少共享库文件的错误
  10. 传奇电子cq9跳高高、跳起来规则与操作技巧
  11. 微信公众号开发框架 For Java —— wechatapi
  12. 手动Linux固定IP
  13. 【汇智学堂】-JS菜鸟版手机小游戏(五子棋游戏之一---准确落下棋子)
  14. Windows下 Java9安装教程
  15. python行列式值计算程序_2、3阶行列式计算(python代码)
  16. Hadoop HA 高可用
  17. html编辑器怎么设置为excel,excel2013宏编辑器的设置方法教程
  18. 考研调剂信息爬取,以“小木虫”为例
  19. 微型计算机地址总线是16位,某微型计算机的地址总线的位数是16位,最大的寻址空间可为()。A.32KBB.64KBC.128KBD.256KB...
  20. mac u盘格式化 linux系统文件,U盘重新安装Mac OS系统教程

热门文章

  1. NeuSomatic:基于深度CNN的肿瘤体细胞突变检测工具
  2. 直播预告:基于强化学习的关系抽取和文本分类 | PhD Talk #18
  3. Linux/windows系统定时任务调度总结
  4. 循环队列-队列的顺序表示和实现
  5. pcb地线应该不应该做成环路_PCB制板的基础知识,你都学会了吗?(中)
  6. python怎么批量处理数据的优点_Python数据处理干货,一文带你深入理解pandas的批量处理方式...
  7. cdh jar包 sqoop2_安装sqoop1.4.6-cdh5.5.2
  8. 零基础带你快速入门consul-难道consul还能这样用?
  9. SpringBoot注解自动扫描-底层实现
  10. vue循环渲染子组件视图不更新问题