Unity EasySave3中文图文教程详解-万能数据保存插件多平台支持

Chinar blog www.chinar.xin

Unity插件 - EasySave中文详解


本文提供全流程,中文翻译。

Chinar 的初衷是将一种简单的生活方式带给世人

使有限时间 具备无限可能

Chinar ―― 心分享、心创新!

助力快速熟悉 Unity EasySave 插件的使用,使你的储存更加方便!

为初学者节省宝贵的时间,避免采坑!

EasySave 教程效果:



全文高清图片,点击即可放大观看 (很多人竟然不知道)


1

Intro —— 简介


EasySave —— 一款方便且强大的数据存储插件,我们可以用来存储多种类型的数据

1. PlayerPrefs 更快

2. 它几乎可以保存任意类型,无需你去为序列化而烦恼

3. 关于跨平台性,亦是十分强大,只需一个插件,无需为更换平台而担心造成多余的开发,兼容问题

支持的平台有类型
PC / Mac / LinuxiOS版
Android的iOS版
Windows Phone 8WebGL的
Windows Universal AppsWindows应用商店
黑莓10持续开发中…

神级英语学者,请直接看官网 —— EasySave官方网站


2

Precondition ―― 准备工作

请支持正版购买和下载

下载导入 Unity 过程就不说了,导入成功后如下图所示:Window 中会出现相应插件
举个例子 导入成功

(由于 Chinar 买的是正版,所以插件直接包含了 Easy Save2Easy Save3)


3

Editor Window ―― 编辑器窗口

3.1 Home ―― 主页

点击 EasySave3 后会弹出插件编辑窗口,首先来了解 Home 页面

主要是为了便于开发者联系、交流,提供文档链接支持等等…
举个例子
在这里插入图片描述


3.2 Settings ―― 设置

接着来看 Settings 页面:

为开发者提供可视化操作的配置途径,用来选择数据储存的方式、加密、默认保存路径等等…
举个例子
在这里插入图片描述

接着我们来仔细了解下 Location 选项中的4个选项

举个例子
Location

类型说明
File类型以文件的形式储存到本地
PlayerPrefs以数据持久化形式储存到本地缓存
Memory加载到内存中
Resources储存到 Resources 文件夹中

数据保存地址

举个例子
Directory
Chinar 建议使用 PersistentDataPath ,它在各个平台中都可以正常储存。

Unity 数据路径相关博文( Chinar Blog )

接着看一下 Encryption Type –加密类型选项:

举个例子
Directory
AES加密知识扩展:来自百度百科

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法
是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS
PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。


3.3 Tool ―― 工具

工具页面提供了几个按钮,便于我们开发使用。
1.打开 持久化数据目录
2.清除该路径下的数据文件
3.清空应用缓存

Tools 窗口会在2.使用 EasySave 中讲到。
举个例子
在这里插入图片描述


3.4 Types ―― 类型


3.5 Auto Save ―― 自动保存

我们可以在什么时候保存或加载呢?

我们可以在任何可以运行代码的地方保存和加载

但通常在游戏开始时Start初始化中加载数据,并在程序退出时 UnityOnApplicationQuit 保存数据

除此之外,日常开发中也常用 OnApplicationPause ,在程序暂停时进行保存数据
举个例子
在这里插入图片描述


4

usage ―― 用法

4.1 Data loading and saving ―― 数据的加载和保存

话不多说,首先来看一下最常用的几个方法:

方法名作用
ES3.Save<T>()保存数据
ES3.Load<T>()加载数据
ES3.LoadInto<T>()把数据,直接赋值给指定对象
ES3.KeyExists()判断该数据中,键是否存在

举个例子

保存与加载

    void Start()
    {
        ES3.Save<int>("ChinarInt", 123);            //将整数 123 保存到名为 ChinarInt 的键中
        int chinarInt = ES3.Load<int>("ChinarInt"); //获取数据中 (键:ChinarInt) 对应的值
        print(chinarInt);                           //打印输出
    }

4.2 The default path for data ―― 数据保存的默认路径

接下来,我们来探究一下默认情况下,数据保存到哪里了

点击 Window --> EasySave3 --> Tools 打开ES3编辑器面板
举个例子
在这里插入图片描述
在这里插入图片描述

记事本 打开,我们会看到数据的存储格式为JSON格式

JSON


4.3 Extend API ―― 保存和加载的扩展 API

如果工程所需保存的数据,种类繁多,或是数据量庞大,所有数据都保存在这一个默认文件中

势必会造成数据管理上的不便,那么我们应该怎么办?

我们可以将数据进行分类管理,并且分别保存我们指定的路径下的文件当中

EasySave<T>()函数有多个重载

举个例子

void Start()
{
    // 将 数据 保存到 默认路径下的默认文件当中
    ES3.Save<int>("ChinarInt", 666);

    // 将 数据 保存到 默认路径下的 ChinarFile.es3 文件当中
    ES3.Save<int>("ChinarInt", 777, "ChinarFile.es3");

    // 将 数据 保存到 默认路径下的 ChinarFolder文件夹下的 ChinarFile.es3 文件当中
    ES3.Save<int>("ChinarInt", 888, "ChinarFolder/ChinarFile.es3");

    // 将 数据 保存到 默认路径下的 ChinarFolder文件夹下的 ChinarFile.es3 文件当中
    ES3.Save<int>("ChinarInt", 999, "C:/Users/Administrator/Desktop/ChinarFile.es3");
}

如此一来,我们就解决了一个文件中数据保存量过大的问题


4.3 Load the assignment directly ―― 直接赋值

ES3.LoadInto<T>() —— 把数据,直接赋值给指定对象

打开Unity,在场景中创建两个 Cube ,Cube1Cube2

设置 Cube1 的世界坐标为(5,5,5)
设置 Cube2 的世界坐标为(0,0,0)
举个例子
在这里插入图片描述

1. 首先保存 Cube1 的 Transform 组件信息,到默认数据文件当中

2. 从默认数据文件当中读取"Chinar_Cube1"键所对应的的值,(Cube1 的 Transform
组件信息),直接赋值给指定对象 Cube2

public class ChinarEs3 : MonoBehaviour
{
    public GameObject Cube1;
    public GameObject Cube2;


    void Start()
    {
        //首先保存 Cube1 的 Transform 组件信息,到默认数据文件当中
        ES3.Save<Transform>("Chinar_Cube1", Cube1.transform);

        //从默认数据文件当中读取"Chinar_Cube1"键所对应的的值,(Cube1 的 Transform 组件信息),直接赋值给指定对象 Cube2
        ES3.LoadInto("Chinar_Cube1", Cube2.transform);
    }
}

运行后,可以看到Cube2的位置信息和Cube1的位置信息一样了
在这里插入图片描述


4.4 Delete ―― 删除

方法名作用
ES3.DeleteKey()删除一条数据( 指定对应的数据)
ES3.DeleteFile()删除一个数据文件
ES3.DeleteDirectory()删除一个目录

举个例子

void Start()
{
    ES3.DeleteKey("Chinar_Key", "ChinarFolder/ChinarFile3.es3"); // 从文件中删除一个键
    ES3.DeleteFile("ChinarFolder/ChinarFile3.es3");              // 删除整个文件
    ES3.DeleteDirectory("ChinarFolder/");                        // 删除一个目录及其包含的所有文件
}

5

Encryption ―― 加密

默认情况下,我们的数据是不被加密的

EasySave3 为我们提供了一种加密方式: AES 加密

有两种 使用方式

1. 编辑器设置:默认加密
2. ES3Settings 脚本类:动态加密

举个例子
我们先来看一下动态加密方式

void Start()
{
    //第一步:声明一个 ES3Settings 对象
    ES3Settings settings = new ES3Settings();
    //第二步:设置加密方式为AES
    settings.encryptionType = ES3.EncryptionType.AES;
    //第三部:设置密码:密码要求为`string`类型
    settings.encryptionPassword = "ChinarPassword";
    //第四步:使用 settings 对象的设置信息,进行加密保存
    ES3.Save<Transform>("Chinar_Cube1", Cube1.transform, Application.dataPath + "/ChinarFile4.es3", settings);
}

然后打开保存的数据文件,可以看到数据已经被加密了
在这里插入图片描述在这里插入图片描述


再来看一下 默认加密
未完待续…

以上就是 EasySave3 的简单用法,更多用法请查看EasySave官方网站

仔细看 Chinar 的教程,可以免去看官方文档的烦恼,几乎重要用法都会讲到!


支持

May Be ―― 开发者,总有一天要做的事!


拥有自己的服务器,无需再找攻略

Chinar 提供一站式《零》基础教程

使有限时间 具备无限可能!

Chinar 知你所想,予你所求!( Chinar Blog )


Chinar

END

本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

要使用 Unity Easysave3 插件保存 LuaTable 类型数据你需要将 LuaTable 转换为字符串类型数据,然后将其保存到本地或云端。 下面是一个保存 LuaTable 数据的示例代码: ```csharp using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using LuaInterface; using PathologicalGames; using System.IO; public class Test : MonoBehaviour { private LuaTable luaTable; void Start () { // 创建一个 LuaTable 数据 luaTable = LuaScriptMgr.Instance.DoFile("Test.lua") as LuaTable; // 将 LuaTable 转换为字符串 string luaTableStr = ESSerializer.SerializeLuaTable(luaTable); // 保存字符串到本地文件 ES3.Save<string>("luaTable", luaTableStr); } } ``` 在上述代码中,我们首先创建了一个 LuaTable 数据,然后使用 `ESSerializer.SerializeLuaTable()` 方法将其转换为字符串类型数据。最后,我们使用 `ES3.Save()` 方法将字符串数据保存到本地文件中,其中 `"luaTable"` 是该数据的键值,你可以根据需要自定义。 当需要加载保存的 LuaTable 数据时,我们可以使用以下代码: ```csharp string luaTableStr = ES3.Load<string>("luaTable"); LuaTable luaTable = ESUtility.LuaTableFromString(luaTableStr); ``` 在上述代码中,我们使用 `ES3.Load()` 方法加载保存的字符串数据,然后使用 `ESUtility.LuaTableFromString()` 方法将其转换为 LuaTable 数据。这样就可以恢复保存数据了。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值