public class SaveData
{
public int i = 11;
public string str = "save";
}
SaveData data = new SaveData();
data.i = 12;
data.str = "ccc";
官方文档:https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html
此值是一个目录路径,您可以在其中存储要在运行之间保留的数据。在 iOS 和 Android 上发布时,persistentDataPath 指向设备上的公共目录。此位置中的文件不会被应用更新删除。用户仍然可以直接删除这些文件。
构建 Unity 应用程序时,会生成一个基于 Bundle Identifier 的 GUID。此 GUID 是 persistentDataPath 的一部分。如果您在以后的版本中保留相同的 Bundle Identifier,则应用程序会在每次更新时访问相同的位置。
判断文件夹是否存在,不存在则创建。
引用空间:using System.IO;
if (!Directory.Exists(Application.persistentDataPath + "/game_Save"))
{
Directory.CreateDirectory(Application.persistentDataPath + "/game_Save");
}
引用空间:System.Runtime.Serialization.Formatters.Binary
BinaryFormatter fomatter = new BinaryFormatter();
储存数据方法:Serialize(FileStream, Data):将指定的流 序列化 成对象(二进制)
取出数据方法:Deserialize(FileStream):将指定的流(二进制) 反序列化 成对象
FileStream file = File.Create(Application.persistentDataPath + "/game_Save/data.txt");
fomatter.Serialize(file,JsonUtility.ToJson(data));
file.Close();
public class SaveData
{
public int i;
public string str;
}
public SaveData data = new SaveData();
public void SavaBinary()
{
data.i = 12;
data.str = "ccc";
if (!Directory.Exists(Application.persistentDataPath + "/game_Save"))
{
Directory.CreateDirectory(Application.persistentDataPath + "/game_Save");
}
BinaryFormatter fomatter = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/game_Save/data.txt");
fomatter.Serialize(file,JsonUtility.ToJson(data));
file.Close();
}
判断文件是否存在,若存在则得到文件流,再将这二进制的文件流,反序列化为string字符串,再进一步转化为对象。
BinaryFormatter bf = new BinaryFormatter();
if (File.Exists(Application.persistentDataPath + "/game_Save/data.txt"))
{
FileStream file = File.Open(Application.persistentDataPath + "/game_Save/data.txt", FileMode.Open);
JsonUtility.FromJsonOverwrite((string)bf.Deserialize(file), data);
}
public void LoadBinary()
{
BinaryFormatter bf = new BinaryFormatter();
if (File.Exists(Application.persistentDataPath + "/game_Save/data.txt"))
{
FileStream file = File.Open(Application.persistentDataPath + "/game_Save/data.txt", FileMode.Open);
JsonUtility.FromJsonOverwrite((string)bf.Deserialize(file), data);
}
}
直接使用json存储,这不需要使用二进制转换类,直接使用FileStream的Write方法即可,其余步骤和上面一致。
不过将json字符串转换为byte数组。
byte[] byteArray = System.Text.Encoding.Default.GetBytes(json);
file.Write(byteArray,0, byteArray.Length);
public void SaveJson()
{
Debug.Log(Application.persistentDataPath);
if (!Directory.Exists(Application.persistentDataPath + "/game_Save"))
{
Directory.CreateDirectory(Application.persistentDataPath + "/game_Save");
}
data.i = 12;
data.str = "ccc";
FileStream file = File.Create(Application.persistentDataPath + "/game_Save/dataJson.json");
string json = JsonUtility.ToJson(data);
byte[] byteArray = System.Text.Encoding.Default.GetBytes(json);
file.Write(byteArray,0, byteArray.Length);
file.Close();
}
和二进制不同,不需要二进制转换类。需要使用byte数组和Encoding.UTF8.GetString转换。
byte[] bytes = new byte[file.Length];
int r = file.Read(bytes, 0, bytes.Length);
string json = Encoding.UTF8.GetString(bytes, 0, r);
public void LoadJson()
{
if (File.Exists(Application.persistentDataPath + "/game_Save/dataJson.json"))
{
FileStream file = File.Open(Application.persistentDataPath + "/game_Save/dataJson.json", FileMode.Open);
byte[] bytes = new byte[file.Length];
int r = file.Read(bytes, 0, bytes.Length);
string json = Encoding.UTF8.GetString(bytes, 0, r);
Debug.Log(json);
JsonUtility.FromJsonOverwrite(json, data);
}
}