1.简单背包系统设计思路

物品类Item:包含物品的所有属性

Json信息存储文本:根据物品类的属性录入数据

储物总控制类InventoryManager:解析Json文本获取物品信息,并根据物品id获取物品

格子类Slot:对将进入背包格子的物品进行设置

物品UI类ItemUI:设置格子中物品UI显示

格子管理类Knapsack:找空格子,并进行存储

设计思路:设置物品属性,根据设定的物品编写Json文本文件,设定一个ItemList集合,通过Json解析工具,解析Json文本,并将其存入ItemList,通过ItemList中已添加的Item的id判断物品,并存入背包中的空格子中(需找到空格子),在空格子中添加代表物品的UI图片。

2.具体代码实现

Item(此处简单设置两个物品属性id与存放路径)

using UnityEngine;public class Item
{public  int ID {get;set;}public   string Sprite { get; set; } public Item( int id,string sprite){this.ID = id;this.Sprite = sprite;}
}

Json文本文件(可在记事本中编写后将后缀改为.json再导入unity中,放在Resources文件夹下,方便读取,物品UI也同理)

[{"id": 1,"sprite": "Picture/fork"},{"id": 2,"sprite": "Picture/cake"},{"id": 3,"sprite": "Picture/paper"},{"id": 4,"sprite": "Picture/match"},{"id": 5,"sprite": "Picture/key"}
]

Json解析工具,可在Asset Store中下载,导入工程

在场景添加空物体,并挂载脚本InventoryManager

using System.Collections.Generic;
using UnityEngine;public class InventoryManager : MonoBehaviour
{#region 单例模式private static InventoryManager _instance;public static InventoryManager Instance{get{if(_instance==null){_instance = GameObject.Find("InventoryManager").GetComponent<InventoryManager>();}        return _instance;   }}#endregionprivate List<Item> itemList;private void Start(){ParseItemJson();}/// <summary>/// 解析物品信息  /// </summary>void ParseItemJson(){itemList = new List<Item>();TextAsset itemText= Resources.Load<TextAsset>("Item");string itemsJson = itemText.text;JSONObject j = new JSONObject(itemsJson);foreach (JSONObject temp in j.list){Item item = null;int id = (int)(temp["id"].n);//得到Json中物品id的值string sprite = temp["sprite"].str;//得到Json中的物品路径item = new Item(id, sprite);itemList.Add(item);}}public Item GetItemById(int id)//通过id获取物品{foreach (Item item in itemList){if(item.ID==id){return item;}}return null;}
}

在背包的格子中添加Slot脚本,并给ItemPerfab添加以创建好的UI预制体

using UnityEngine;public class Slot : MonoBehaviour
{public GameObject itemPrefab;public void TheStoreItem(Item item){GameObject itemGameObject = Instantiate(itemPrefab) as GameObject;itemGameObject.transform.SetParent(this.transform);itemGameObject.transform.localPosition = Vector3.zero;itemGameObject.GetComponent<ItemUI>().SetItem(item);}
}

给UI预制体添加脚本ItemUI并给itemImage赋值

using UnityEngine;
using UnityEngine.UI;
public class ItemUI : MonoBehaviour
{public  Image itemImage;public Item Item {get;set;}public void SetItem(Item item){this.Item = item;itemImage.sprite = Resources.Load<Sprite>(item.Sprite);}
}

给背包添加Knapsack脚本

using UnityEngine;public class Knapsack : MonoBehaviour
{private Slot[] slotList;private static Knapsack _instance;public static Knapsack Instance{get{if(_instance==null) {              _instance = GameObject.Find("KnapsackPanel").GetComponent<Knapsack>();}return _instance;}}void Start(){slotList = GetComponentsInChildren<Slot>();//得到所有含有Slot组件的子物体      }public bool StoreItem(int id){Item item = InventoryManager.Instance.GetItemById(id);return StoreItem(item);}public bool StoreItem(Item item){if(item==null){Debug.LogWarning("要存储的物品的ID不存在");return false;}else{Slot slot = FindEmptySlot();if(slot==null){Debug.LogWarning("没有空的物品槽");return false;}else{slot.TheStoreItem(item);//存储物品到空槽}return true;}}private Slot FindEmptySlot()//找空格子{foreach (Slot  slot in slotList){if(slot.transform.childCount==0){return slot;}}return null;}
}

至此简单的背包管理业务逻辑(无拖拽,同物品累计添加功能)就完成了,最后就可以根据实际情况(鼠标点击获取物品,按键获取物品,完成任务获取物品)调用Knapsack中的StoreItem(int id)函数,根据id来往背包中的空格子进行物品的添加了。

Unity-背包系统与Json文本解析相关推荐

  1. C语言实现json文本解析

    C语言实现json文本解析 背景 总体方法 实现源码 相关资料 背景 项目中,有时需要根据外部输入条件,进行程序的灵活切换,运用JSON文件解析,能高效的替换指令行输入,且直观易懂. 总体方法 JSO ...

  2. Android json数据解析及简单例子

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...

  3. Android开发--使用实体类解析JSON文本

    Android开发–使用实体类解析JSON文本 在Android开发过程中,涉及到了API的调用的时候,会返回特定的数据,两个主流返回的数据格式是JSON形式和XML形式.但是相对于XML,JSON数 ...

  4. 解析json文本并使用handler完成三个控件文本内容的切换

    Demo需求: 三个控件展示三个关键词,在资源文件获取文本,每隔5秒切换下一词,关键词展示到最后再重头开始 开发工具:Android studio 布局: <?xml version=" ...

  5. Unity数据持久化-Json

    文章目录 JSON概念: JSON结构: JSON优势: 与JavaScript的关系: Unity方法: 使用JsonUtility Json存储 Json加载: 注意事项: 完整代码参考: 使用L ...

  6. spark中读取json_【spark】文件读写和JSON数据解析

    1.读文件 通过 sc.textFile("file://")方法来读取文件到rdd中. val lines = sc.textFile("file://")/ ...

  7. JSON 数据格式解析(转)

    JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.本文将快速讲解 JSON 格式,并通过代码示例演示如 ...

  8. Json字符串解析原理、超大json对象的解析

    概述 附上完整的代码: https://files.cnblogs.com/files/xcr1234/json.rar 一个类实现json解析核心代码(ObjectParser),其他的类都是工具类 ...

  9. 将html代码确析成json数据格式,JSON字符串解析成JSON数据格式

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的ea ...

  10. JSON数据格式解析库(cJSON、Jansson)的使用在STM32上移植和使用

    json | json-c使用入门 这篇讲的也不错,抽空看下(网络传输json数据) https://www.bilibili.com/video/av669454528?p=3&spm_id ...

最新文章

  1. Owncloud-X安装配置
  2. 聊聊spring cloud gateway的GlobalFilter
  3. 关于webrtc视频会议的解决方案
  4. 【Android 应用开发】Android 返回堆栈管理 ( 默认启动模式 | 栈顶复用启动模式 | 栈内复用启动模式 | 单实例启动模式 | CLEAR_TOP 标识 )
  5. 生成对抗网络(GAN)的统计推断
  6. 林子大了,什么鸟都有----.NET运用String的十八层境界
  7. 【POI1999codevs3634】积水,关于sunshine爷的NOIP(suan)水(ge)题(pi)赛
  8. Linux 内核简介
  9. hdu5651 xiaoxin juju needs help(逆元)
  10. web前端学习(总结/心得)
  11. JSONP 的工作原理
  12. 前端提高篇(三十九)CSS进阶7:columns多列布局
  13. python计算金星凌日
  14. 无法在此iPhone激活面容ID怎么办?
  15. python怎么换行输入print_python中print换行的方法
  16. ICS文件说明和创建(以Outlook为例)
  17. 苹果电脑 开机密码 忘记了, 黑苹果系统
  18. BT源代码学习心得(二):程序运行参数的获取 -- 转贴自 wolfenstein (NeverSayNever)
  19. 华为k662c的虚拟服务器,华为k662c路由器怎么设置 | 华为k662c路由器设置_什么值得买...
  20. 打印机服务无法启动 错误代码1068

热门文章

  1. 使用Gpu恢复7z密码
  2. 小瞥linux下UML工具
  3. linux文件复制覆盖命令
  4. Nessus插件包20220925
  5. vue面试题整理(2022-持续更新中...)
  6. 微信小程序tabBar的开发设置
  7. 洞见科技创始人姚明:隐私计算让数据穿上“防护服”的同时,还能充分释放数据价值...
  8. 如何修复Win7照片查看器无法显示的图片
  9. 一款PDF解密工具的Keygen
  10. 微信小程序常用样式汇总