学习记录:unity的json存储

1效果展示

 2代码展示(备注很详细)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;

//将类序列化到文件中,同时序列化到编辑器中
[System.Serializable]
public class PlayerCoin{
    public int count;
    public string name;
    public bool isWinner;
}

//存储一系列类数据,必须创建一个链表,链表必须存在在类中,才能被序列化
public class PlayerCoinList
{
    public List<PlayerCoin> playerCoinList = new List<PlayerCoin>();
}

public class DataSaveManager : MonoBehaviour
{
    public PlayerCoinList list = new PlayerCoinList();
    PlayerCoin knight;      //保存骑士
    PlayerCoin wizzard;      //保存巫师

    public Text knightCoin;     //骑士的金币数量的显示文字
    public Text wizzardCoin;     //巫师的金币数量的显示文字


    // Start is called before the first frame update
    void Start()
    {
        //创建json数据,只需要创建一次就行
        // GenerateData();
        //数据的读取
        LoadDate();
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    #region 生成实例并赋初值
    void GenerateData()
    {
        knight = new PlayerCoin();
        knight.count = 0;
        knight.name = "Knight";
        knight.isWinner = false;

        wizzard = new PlayerCoin();
        wizzard.count = 0;
        wizzard.name = "Wizzard";
        wizzard.isWinner = false;

        list.playerCoinList.Add(knight);
        list.playerCoinList.Add(wizzard);
    }
    #endregion

    #region 金币增加按钮事件
    //按钮事件:点击按钮时金币数量的增加
    public void OnClickCoin(string _player)
    {
        if (_player.Equals("Knight"))
        {
            knight.count += 1;
            knightCoin.text = knight.count.ToString();
        }else if (_player.Equals("Wizzard"))
        {
            wizzard.count += 1;
            wizzardCoin.text = wizzard.count.ToString();
        }
    }
    #endregion

    #region 数据存储
    void SaveData()
    {
        //将list转化成一个json文件
        string json = JsonUtility.ToJson(list,true);
        //设置保存的路径
        string filePath = Application.streamingAssetsPath + "/playCoinList.json";
        //文件的写入
        using(StreamWriter sw = new StreamWriter(filePath))
        {
            sw.WriteLine(json);
            sw.Close();
            sw.Dispose();
        }
    }

    #endregion

    #region 保存按钮事件

    public void OnClickQuit()
    {
        //数据的存储
        SaveData();
        //退出游戏
        UnityEditor.EditorApplication.isPlaying = false;       //编辑器下退出游戏
        Application.Quit();
    }
    #endregion

    #region 数据的读取

    void LoadDate()
    {
        string json;
        string filePath = Application.streamingAssetsPath + "/playCoinList.json";

        //检测json文件是否存在
        if (File.Exists(filePath))
        {
            //json文件存在,直接进行数据读取
            using (StreamReader sr = new StreamReader(filePath))
            {
                json = sr.ReadToEnd();
                sr.Close();
            }
            //将json文件转化为内存中的一个变量
            list = JsonUtility.FromJson<PlayerCoinList>(json);

            //将读取的数据赋值
            knight = list.playerCoinList[0];
            wizzard = list.playerCoinList[1];

            //更新文本显示
            knightCoin.text = knight.count.ToString();
            wizzardCoin.text = wizzard.count.ToString();
        }
        else
        {
            //json文件不存在,先创建,再进行读取
            GenerateData();
        }


    }
    #endregion

}

3Unity界面

 脚本挂载在manager这个空物体上,对应的按钮添加对应的事件(注意:在金币增加按钮事件的添加时:输入的string的字符串必须与代码中一致)

4程序包链接

链接:https://pan.baidu.com/s/1a9x6Jmbh8o9L1Q54tqED6Q 
提取码:jl98

(ps:在哔哩哔哩找了一个视频学习的,视频链接也放这了:【UNITY教程】第1集 使用JSON存储数据_哔哩哔哩_bilibili

猜你喜欢

转载自blog.csdn.net/shijinlinaaa/article/details/125896790
今日推荐