1.Player Prefs
只能存取三种类型,用键来读取。官方是给存储玩家偏好设置的,但是用来存档也可。
优点简单易用,缺点数据不安全
![](https://first.your-heart.top/wp-content/uploads/2022/03/WWJH7I0AL200G269BWE-1024x424.png)
不同平台存储位置不一样,Windows数据存储在注册表中
![](https://first.your-heart.top/wp-content/uploads/2022/03/EM8Y7F1BA@24A7SOOXI-1024x538.png)
把下面代码给button点击事件,即可实现存取档
void SaveByPlayerPrefs()
{
PlayerPrefs.SetString("PlayerName", playerName);
PlayerPrefs.Save();
}
void LoadByPlayerPrefs()
{
playerName = PlayerPrefs.GetString("PlayerName");
}
//GetString可以有第二个参数,意义是读不到我们特定的键时返回的值,我们//可以写成"存档损害或没有该存档"
//删除可用PlayerPrefs.DeleteAll()和PlayerPrefs.DeleteKey()
//PlayerPrefs其实还有JsonUlliity在注册表中存储json串。
2.json
![](https://first.your-heart.top/wp-content/uploads/2022/03/图片-1-1024x367.png)
接下来为了实现一下保存的demo,我们在场景中创建点组件
![](https://first.your-heart.top/wp-content/uploads/2022/03/图片-5.png)
为了结构简单,我们建一个普通的就是不继承mono的C#脚本,我命名为 jsonSave.cs
using System.Collections;
using System.IO;
using System.Collections.Generic;
using UnityEngine;
public static class jsonSave
{
public static void SaveByJson(string SaveFileName,object data)
{
var json = JsonUtility.ToJson(data);
var path = Path.Combine(Application.persistentDataPath, SaveFileName);
File.WriteAllText(path, json);
}
public static T LoadFromJson<T>(string SaveFileName)
{
var path = Path.Combine(Application.persistentDataPath, SaveFileName);
var json = File.ReadAllText(path);
var data = JsonUtility.FromJson<T>(json);
return data;
}
public static void DeleteSaveFile(string SaveFileName)
{
var path = Path.Combine(Application.persistentDataPath, SaveFileName);
File.Delete(path);
}
}
下面在挂载在一个gameobject上的脚本添加如下代码,并把刚在ui界面上创建的组件拖到咱们的脚本公有接口上。
[System.Serializable]class SaveData
//可序列化标记,不然不能被正确转换json
{
public string savedata1;
public int savedata2;
public Vector3 savedata3;
}
SaveData SavingData()
{
var saveData = new SaveData();
saveData.savedata1 = data1.text;
saveData.savedata2 = int.Parse(data2.text);
saveData.savedata3 = transform.position;
return saveData;
}
public Text data1;
public Text data2;
public void SaveByJson()
{
jsonSave.SaveByJson("data.txt",SavingData());
}
public Text loaded1;//开放共有字段
public Text loaded2;
void Loadjson(SaveData saveData)
{
loaded1.text = saveData.savedata1;
loaded2.text = saveData.savedata2.ToString();
transform.position = saveData.savedata3;
}
public void LoadByJson()
{
var loaddata = jsonSave.LoadFromJson<SaveData>("data.txt");
Loadjson(loaddata);
}
public void DeleteJson()
{
jsonSave.DeleteSaveFile("data.txt");
}
支持unity序列化的字段如下
![](https://first.your-heart.top/wp-content/uploads/2022/03/图片-2-1024x548.png)
![](https://first.your-heart.top/wp-content/uploads/2022/03/图片-3.png)
![](https://first.your-heart.top/wp-content/uploads/2022/03/图片-4-1024x388.png)
以上两个方法来自b站的亲爱的阿婆主
[Unity] 存档系统 Part 1 | PlayerPrefs | Unity初学者系列教程 | 数据存取 | 存档读档 | Save&Load_哔哩哔哩_bilibili
3.数据库云存档(以mysql为例)
目前正在更新中