Unity进阶,Unity存档系统(Json可序列化存档,AES加密)

本文围绕Unity游戏的存档系统展开。介绍了使用JsonUtility将数据转化为Json格式搭建存档系统的思路,指出Json易读性在存档中可能导致作弊问题,因此采用AES加密。详细说明了存档步骤,还提及读取、删除存档,以及AES加解密、Python生成AES的key等内容,并给出整体和测试代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

存档系统

1.JSON讲解

关于JSON的具体描述可以百度

2.JsonUtility

JsonUtility可以将可序列对象转化为Json格式的文件,那么,使用JsonUtility搭建存档系统的核心思路就是

    第一步,将需要保存的数据转化位Json格式

    第二步,将转换后Json文件写在某个路径下的一个文件夹中

当然读取的时候反过来就可以了

我们知道Json有一个优点,那就是直观易读,但是在存档系统中,Json的这个有点将成为致命的缺点,那就是其他人也是易读的,这样就会造成一种结果,那就是存档后,将存档文件修改,就可以做到开G

所以,为了避免这种情况,我们将使用AES进行加密,其他的加密方式也可以,具体看自己需求

下面开始存档系统的搭建

3.第一步存档

写一个函数,需要传递两个参数,一个是保存的存档文件的文件名,另一个是需要存档的数据文件,为object类型

第一步便是json转换

第二步是AES加密(该函数待会儿写)

第三步确定保存的路径

var path = Path.Combine(Application.persistentDataPath, saveFileName);

这行代码Path.Combine()用于将传入的两个参数结合

Application.persistentDataPath 是Unity提供的API,自动获取路径,详见Unity手册

saveFileName 是保存的文件名字

接下来便使用try catch语句来进行异常的捕获

public static void SaveByJson(string saveFileName, object data)
        {
            var json = JsonUtility.ToJson(data);
            var encryptedJson = EncryptString(key, json);  // AES解密
            var path = Path.Combine(Application.persistentDataPath, saveFileName);

            try
            {
                File.WriteAllText(path, encryptedJson);
                #if UNITY_EDITOR
                Debug.Log($"成功保存到 {path}.");
                #endif
            }
            catch(System.Exception exception)
            {
                #if UNITY_EDITOR
                Debug.Log($"文件保存到 {path}. \n{exception}");
                #endif
            }
        }

 4.读取存档

具体不多讲,看代码

public static T LoadFromJson<T>(string saveFileName)
        {
            var path = Path.Combine(Application.persistentDataPath, saveFileName);

            try
            {
                //var json = File.ReadAllText(path);
                var encryptedJson = File.ReadAllText(path);
                var json = DecryptString(key, encryptedJson);// 使用解密函数解密数据
                var data = JsonUtility.FromJson<T>(json);
                Debug.Log($"成功读取到 {path}.");

                return data;
            }
            catch(System.Exception exception)
            {
                #if UNITY_EDITOR
                Debug.Log($"文件从 {path} 加载. \n{exception}");
                #endif

                return default;
            }
        }

 5.删除存档

public static void DeleteSaveFile(string saveFileName)
        {
            var 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值