unity 背包选中_Unity背包系统实现
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背包系统实现相关推荐
- Unity学习日志_Unity父子关系与Camera
Unity学习日志_Unity父子关系与Camera 本次组件简单介绍将不包含monoBehaviour类及其向上回溯的父类. 1. 关于父子物体 首先需要声明的一点是所有游戏物体的Trans ...
- Unity学习日志_Unity地形系统简介
Unity学习日志_Unity地形系统简介 地形创建: Terrain中的组件: Transform Terrain 四大功能: paint Terrain,可以选择下面几种具体的模式: Create ...
- unity 实现文本选中_Unity中如何读取TXT文本内容
在游戏开发过程中,我们是离不开需求的,而需求的事情是由策划来做的,那么我们和策划也是需要沟通交流的,那么是怎么交流的呢?策划不需要写代码,只需要思考一些游戏的内容,数据,玩法的实现,然后让我们按照策划 ...
- unity 获取选中的目录_Unity的目录管理
Assets目录 在一个 Unity 3D 项目中,通常会有大量的模型.材质以及其他游戏资源,所以需要将游戏资源归类到不同文件夹做分类管理. 其中有一些特殊的目录名称会被Unity识别,它们有不同的特 ...
- ugui unity 取消选择_Unity暑期萌新入门:环境篇
大家好,新一期又跟大家见面了. 上一节我们完成了角色的移动控制,然而John只能在空白的场景中移动.因此接下来这一节我们将添加关卡.调节光照,让John来到阴森的鬼屋.然后设置NavMesh(导航网格 ...
- unity 平移图片_Unity 两张背景的切换平移
两张背景图片向左移动,当屏幕看见的时候. 使用的是Unity自带的Sprite,当然也可以使用NGUI Sprite using UnityEngine; using System.Collectio ...
- unity算法面试_Unity面试题汇总
<Unity面试题汇总>由会员分享,可在线阅读,更多相关<Unity面试题汇总(52页珍藏版)>请在人人文库网上搜索. 1.一. C#语言1. 重载和重写的区别1) 所处位置不 ...
- unity 发光字体_Unity 游戏开发技巧集锦之创建自发光材质
Unity 游戏开发技巧集锦之创建自发光材质 Unity游戏开发技巧集锦教程大学霸内部资料 创建自发光材质 自发光材质(self-illuminated material)是指自己会发光的材质.生活中 ...
- Q Inventory System unity背包物品插件 使用笔记
Q Inventory System 一个非常不错的背包物品插件 功能很完整,用起来简单.但是作者好像很久没更新了 网上相关教程也比较少,用户手册上的内容版本对不太上了.我在此记录一下学习摸索的过程, ...
最新文章
- Rancher前奏--配置Nexus
- 关于操作系统中进程、线程、死锁、同步、进程间通信(IPC)的超详细详解整理
- Eclipse使用SVN
- Spring Boot----Dubbo原理分析
- 85岁院士的新年浪漫:这大概是最美好的爱情
- Spring初始化:org.springframework.we...ContextLoaderListener的作用
- caffe 使用cudnn 加速报错
- 5.Struts2配置形式,覆盖
- Linux 中安装软件报缺少共享库文件的错误
- 传奇电子cq9跳高高、跳起来规则与操作技巧
- 微信公众号开发框架 For Java —— wechatapi
- 手动Linux固定IP
- 【汇智学堂】-JS菜鸟版手机小游戏(五子棋游戏之一---准确落下棋子)
- Windows下 Java9安装教程
- python行列式值计算程序_2、3阶行列式计算(python代码)
- Hadoop HA 高可用
- html编辑器怎么设置为excel,excel2013宏编辑器的设置方法教程
- 考研调剂信息爬取,以“小木虫”为例
- 微型计算机地址总线是16位,某微型计算机的地址总线的位数是16位,最大的寻址空间可为()。A.32KBB.64KBC.128KBD.256KB...
- mac u盘格式化 linux系统文件,U盘重新安装Mac OS系统教程
热门文章
- NeuSomatic:基于深度CNN的肿瘤体细胞突变检测工具
- 直播预告:基于强化学习的关系抽取和文本分类 | PhD Talk #18
- Linux/windows系统定时任务调度总结
- 循环队列-队列的顺序表示和实现
- pcb地线应该不应该做成环路_PCB制板的基础知识,你都学会了吗?(中)
- python怎么批量处理数据的优点_Python数据处理干货,一文带你深入理解pandas的批量处理方式...
- cdh jar包 sqoop2_安装sqoop1.4.6-cdh5.5.2
- 零基础带你快速入门consul-难道consul还能这样用?
- SpringBoot注解自动扫描-底层实现
- vue循环渲染子组件视图不更新问题