一、和策划配合,将数据表编辑后导入unity存储的方式
1、新建excel文件,配置基础道具信息
2、用在线Json工具,将excel转换为json配置,并稍微修改json配置(添加一个info作为key)
3、在unity脚本中读取道具信息
首先定义一个道具的数据结构,让我们能够从json字符中读出信息并存储
例如json的构成如下:
{
"info": [{
"id": 1,
"name": "匕首",
"icon": 1,
"type": 100,
"tips": "锋利"
}, {
"id": 2,
"name": "头盔",
"icon": 2,
"type": 150,
"tips": "坚固"
}, {
"id": 3,
"name": "红药",
"icon": 3,
"type": 10,
"tips": "加血"
}, {
"id": 4,
"name": "蓝药",
"icon": 4,
"type": 10,
"tips": "加蓝"
}, {
"id": 5,
"name": "红宝石",
"icon": 5,
"type": 50,
"tips": "值钱的"
}, {
"id": 6,
"name": "蓝宝石",
"icon": 6,
"type": 20,
"tips": "值钱的"
}]
}
我们就用这样格式的类进行存储:
/// <summary>
/// 道具列表
/// </summary>
public class Items
{
//还记得我们在Json最开始多写的那个info吗
public List<Item> info;
}
/// <summary>
/// 道具具体属性
/// </summary>
[System.Serializable]
public class Item
{
public int id;
public string name;
public string icon;
public int type;
public string tips;
}
通过以下方式读出json信息
//加载Resource文件夹下的Json文件
string info = ResMgr.GetInstance().Load<TextAsset>("Json/ItemInfo").text;
//根据Json文件的内容,解析成对应的数据结构 并存储起来
Items items = JsonUtility.FromJson<Items>(info);
//将道具列表信息存到字典中
for (int i = 0; i <items.info.Count; i++)
{
itemInfos.Add(items.info[i].id, items.info[i]);
}
我们可以存储到一个字典中 方便我们后续使用 key值用id(唯一)value就用Item也就是道具
private Dictionary<int, Item> itemInfos = new Dictionary<int, Item>();
以上这种方式将含有道具种类与特性的excel文件提供给策划进行编辑,保证两端可分离
二、已经拥有存储的数据,对数据进行更新的方式
有时候我们需要用File文件保存我们的信息,能够随时让我们程序进行修改和读取,就像角色升级时角色属性的更改
首先定义一个角色类
public class Player
{
public string name;
public int lev;
public int money;
public int gem;
public int pro;
public List<ItemInfo> items;
public List<ItemInfo> equips;
public List<ItemInfo> gems;
public Player()
{
name = "lzy";
lev = 1;
money = 9999;
gem = 0;
pro = 99;
items = new List<ItemInfo>() { new ItemInfo() { id = 1, num = 1 } };
equips = new List<ItemInfo>() { new ItemInfo() { id = 3, num = 10 } };
gems = new List<ItemInfo>() { new ItemInfo() { id = 2, num = 5 } };
}
}
/// <summary>
/// 玩家拥有的道具基础信息
/// </summary>
//加入序列化特性 让json能够读取 否则可能会报错
[System.Serializable]
public class ItemInfo
{
public int id;
public int num;
}
我们需要指定文件的保存位置 通常我们将文件保存在Application.persistentDataPath,对应的路径就是C:\Users\86178\AppData\LocalLow\DefaultCompany\(项目名)/
这是一种可读可写的形式,书写方式如下
//存储角色信息
//也是提供给外部的获取角色信息的接口
public Player playerInfo;
//玩家信息存储路径
private static string PlayerInfo_Url = Application.persistentDataPath + "/PlayerInfo.txt";
我们通常在初始化的时候需要新建一个角色,就需要读取File文件的信息,如果没有就需要新建一个
如果没有玩家数据就需要新建一个,我们从Player的构造函数中获得初始值,通过Json翻译成字符格式,再用File的书写格式将json字符串写进去,字符选择UTF8格式
如果有玩家数据就进行读取,File先读取到的是字节数组格式的信息,我们也通过json作为中间人进行转换,最终赋给玩家的数据结构中
//初始化角色信息
if (File.Exists(PlayerInfo_Url))
{
//读取指定路径的文件的字节数组
byte[] bytes= File.ReadAllBytes(PlayerInfo_Url);
//把字节数组转成字符串
string json = Encoding.UTF8.GetString(bytes);
//再把字符串转成玩家的数据结构
playerInfo = JsonUtility.FromJson<Player>(json);
}
else
{
//没有玩家数据时 初始化一个默认数据
playerInfo = new Player();
//并存储他
string json=JsonUtility.ToJson(playerInfo);
File.WriteAllBytes(PlayerInfo_Url, Encoding.UTF8.GetBytes(json));
}