Unity3d 读Json文件

匿名 (未验证) 提交于 2019-12-03 00:21:02

在最近的版本已经不需要json的插件了,U3D自带了一个JsonUtility类。

不过JsonUtility必须

[         {         "id": 1,         "name": "血瓶",         "type": "Consumable",         "quality": "Common",         "description": "这个是用来加血的",         "capacity": 10,         "buyPrice": 10,         "sellPrice": 5,         "hp": 10,         "mp": 0,         "sprite": "Sprites/Items/hp"     },     {         "id": 2,         "name": "蓝瓶",         "type": "Consumable",         "quality": "Common",         "description": "这个是用来加蓝的",         "capacity": 10,         "buyPrice": 10,         "sellPrice": 5,         "hp": 0,         "mp": 10,         "sprite": "Sprites/Items/mp"     }]

类似于这样的数组json文件解析, 必须返回一个object..所以解决的办法可以是类似于下面这样,先定义一个object类,之后再从中遍历的形式来解析。

{   "inforList":   [         {         "id": 1,         "name": "血瓶",         "type": "Consumable",         "quality": "Common",         "description": "这个是用来加血的",         "capacity": 10,         "buyPrice": 10,         "sellPrice": 5,         "hp": 10,         "mp": 0,         "sprite": "Sprites/Items/hp"     },     {         "id": 2,         "name": "蓝瓶",         "type": "Consumable",         "quality": "Common",         "description": "这个是用来加蓝的",         "capacity": 10,         "buyPrice": 10,         "sellPrice": 5,         "hp": 0,         "mp": 10,         "sprite": "Sprites/Items/mp"     }   ] }

u3d的代码解析部分:

using System.Collections; using System.Collections.Generic; using UnityEngine; using CommonLib; using System.Text; using System.IO;   namespace ItemSystem {     public class JsonData     {         public string name;         public string type;         public string quality;         public string description;         public string sprite;         public int capacity;         public int buyPrice;         public int sellPrice;         public int id;          public int hp;         public int mp;          public int strength;         public int intellect;         public int agility;         public int stamina;         public string euqipType;      }     public class ItemList     {         public List<JsonData> inforList;     }      public class InventoryMgr : Singleton<InventoryMgr>     {         private List<Item> itemList=new List<Item>();         public void ParseItemJson()         {             TextAsset itemAsset=Resources.Load<TextAsset>("Json/Items");             string itemsJson = itemAsset.text;             ItemList list = JsonUtility.FromJson<ItemList>(itemsJson);             foreach(var item in list.inforList)             {                 //先解析公共属性                 Item.ItemType type =(Item.ItemType) System.Enum.Parse(typeof(Item.ItemType), item.type);                 Item.Quality quality = (Item.Quality)System.Enum.Parse(typeof(Item.Quality),item.quality);                 string description = item.description;                 string name = item.name;                 string sprite = item.sprite;                 int capacity = item.capacity;                 int buyPrice = item.buyPrice;                 int sellPrice = item.sellPrice;                 int id = item.id;                 Item myItem = null;                 switch (type)                 {                     case Item.ItemType.Consumable:                         int hp = item.hp;                         int mp = item.mp;                         myItem = new Consumable(id, name, type, quality, description, capacity, buyPrice, sellPrice, sprite, hp, mp);                         break;                     case Item.ItemType.Equipment:                         int strengh = item.strength;                         int agility = item.agility;                         int intellect = item.intellect;                         int stamina = item.stamina;                         //myItem = new Equipment(id, name, type, quality, description, capacity, buyPrice, sellPrice, sprite,);                         break;                     case Item.ItemType.Weapon:                         break;                     case Item.ItemType.Material:                         break;                 }                 if (myItem!=null)                 {                     itemList.Add(myItem);                     Debug.Log(myItem);                 }             }         }      } }

要注意的是:ItemList类中名称,必须与json文件中总的名称一致,否则无法解析

这个Mgr是个单例类,如果要运行,可自行改成单例 或者挂载调用。


文章来源: Unity3d 读Json文件
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!