一、和策划配合,將數據表編輯后導入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));
}
