Unity简单的存档系统

使用Unity的JsonUtility来进行存储和读取存档

存档系统脚本

1.创建一个文件保存的路径

private const string SavePath = "/saveData.json";

private void Start()
{
    path = Path.Combine(Application.persistentDataPath, SavePath);//Application.persistentDataPath自适应平台生成路径
}

这里使用了const关键字是因为const关键字限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。

2.存档方法

public void SaveData()
{
    string json = JsonUtility.ToJson(gameData);//转换成json
    File.WriteAllText(path, json);//写入设定好的文件路径文件中
}

3.读档方法

public void LoadData()
{
    if (File.Exists(path))//当没有存档时
    {
        string json = File.ReadAllText(path);//读取特定文件路径的文件
        gameData = JsonUtility.FromJson<data>(json);//反序列化
    }
    else
    {
        gameData = new data(1);//必须得有一个存档才能读档
        SaveData();//上面写的存档方法
    }
}

测试

一个简单的计数器,点击加号数字加一,点击减号数字减一,一个存档按钮一个读档按钮

创建数据类脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class data 
{
    public int i;
    public data(int i)//创建一个可以接收初始参数的构造函数,这样在创建data对象时可以直接设置
    {
        this.i = i;
    }
}

JsonUtility只能将带可序列化的public,[SerializeField]private转化为json格式

创建存档系统脚本(包含加号的方法和减号的方法)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;//要使用File.WriteAllText的命名空间
using static data;
using Unity.VisualScripting;
using System;
using UnityEngine.UI;
public class SaveSystem : MonoBehaviour
{
    private data gameData;

    private int number;
    public Text num;
    private const string SavePath = "/saveData.json";
    private string path;
    private void Start()
    {
        path = Path.Combine(Application.persistentDataPath, SavePath);//Application.persistentDataPath自适应平台生成路径
    }
    private void Update()
    {
        num.text = number.ToString();
        gameData = new data(number);//获取存档中的数据
    }
    public void SaveData()
    {
        string json = JsonUtility.ToJson(gameData);
        File.WriteAllText(path, json);
        if (json != null)
        {
            Debug.Log(json);
        }
    }
    public void LoadData()
    {
        if (File.Exists(path))//当没有存档时
        {
            string json = File.ReadAllText(path);//读取特定文件路径的文件
            gameData = JsonUtility.FromJson<data>(json);//反序列化
            number = gameData.i;
            Debug.Log(number);
        }
        else
        {
            gameData = new data(1);//必须得有一个存档才能读档
            SaveData();
        }
    }

    public void Add()
    {
        number++;
        //print(Data.i);
    }
    public void Subtract()
    {
        number--;
        //print(Data.i);
    }
}

可以看到存档系统正常运行

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值