unity自带有一套数据存储的系统,但是其支持的数据类型较少,不是非常好用。这里我们使用第三方存储工具Easy Save进行数据存储和读取。
将Esay Save导入到项目问题记录:
这里我不知道为什么Package Manager始终没法检测到Easy Save的包,我们可以选择Assets -> Import Package -> Custom Package在硬盘中导入Easy Save的unitypackage文件
接下来我们创建了SaveManager脚本用于控制数据储存
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SaveManager
{
private static SaveManager instance;
public static SaveManager Instance {
get {
if (instance == null) {
instance = new SaveManager();
}
return instance;
}
}
ES3Settings setting = new ES3Settings(ES3.EncryptionType.AES, "test");
// save
public void Save<T>(string key, T value) {
ES3.Save<T>(key, value, setting);
}
// load
public T Load<T>(string key) {
return ES3.Load<T>(key, setting);
}
// load into a gameObject
public void Loadinto<T>(string key, T t) where T:UnityEngine.Object {
ES3.LoadInto<T>(key, t, setting);
}
// save image in png
public void SaveImage(Texture2D texture, string imageName) {
ES3.SaveImage(texture, imageName);
}
// load image
public Texture2D LoadImage(string imageName) {
return ES3.LoadImage(imageName);
}
// clear save
public void Clear() {
ES3.DeleteDirectory(setting);
}
}
1
ES3Settings setting = new ES3Settings(ES3.EncryptionType.AES, "test");
Easy Save包含加密功能,这里我们使用AES加密,加密密钥为一个字符串,我们设为“test”。注意在后面存档程序中如果使用到加密,读档中一定要进行解密
2
// save
public void Save<T>(string key, T value) {
ES3.Save<T>(key, value, setting);
}
// load
public T Load<T>(string key) {
return ES3.Load<T>(key, setting);
}
存档和读档。由于ES3支持许多中数据类型,我们使用泛型实现
3
// load into a gameObject
public void Loadinto<T>(string key, T t) where T:UnityEngine.Object {
ES3.LoadInto<T>(key, t, setting);
}
将读档内容加载到游戏物体上。有些时候我们希望保存某一游戏物体上面组件的数据,在读档是将数据加载到游戏物体上。如我们保持一个物体transform的坐标位置,然后读档时将坐标值传到同一个transform上。 Esay Save提供了该方法LoadInto。要写入的游戏物体类型我们还是使用泛型定义,不过限制泛型必须属于UnityEngine.Object类型
4
// save image in png
public void SaveImage(Texture2D texture, string imageName) {
ES3.SaveImage(texture, imageName);
}
// load image
public Texture2D LoadImage(string imageName) {
return ES3.LoadImage(imageName);
}
读取和保存图片。图片数据类型为Texture2D
5
// clear save
public void Clear() {
ES3.DeleteDirectory(setting);
}
清空存档