unity json讀取存儲數據的方式


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM