Appearance
数据与存档
基础概念
数据是游戏当前状态,比如金币、等级、背包、任务进度。 存档是把这些状态写到本地文件、PlayerPrefs 或服务器,等玩家下次打开游戏时再读回来。
最常见选择:
PlayerPrefs:存少量设置,比如音量、语言、画质。JSON 文件:存完整单机进度,比如关卡、金币、背包、任务。ScriptableObject:更适合做配置表,不适合在正式 Player 里当运行时存档写入。服务器 / 云存档:存账号资产、充值、排行榜、跨设备进度。
最小存档类
c
using System;
using System.Collections.Generic;
[Serializable]
public class SaveData
{
public int saveVersion = 1;
public int level;
public int gold;
public List<string> ownedItems = new();
}注意:存档类尽量只放“纯数据字段”,不要放 GameObject、Transform、MonoBehaviour。
JSON 文件保存与读取
c
using System.IO;
using UnityEngine;
public static class SaveManager
{
private static string SavePath =>
Path.Combine(Application.persistentDataPath, "save.json");
public static void Save(SaveData data)
{
string json = JsonUtility.ToJson(data, true);
File.WriteAllText(SavePath, json);
}
public static SaveData Load()
{
if (!File.Exists(SavePath))
return new SaveData();
string json = File.ReadAllText(SavePath);
return JsonUtility.FromJson<SaveData>(json);
}
}PlayerPrefs 示例
c
PlayerPrefs.SetFloat("Volume", 0.8f);
PlayerPrefs.SetInt("Quality", 2);
PlayerPrefs.Save();
float volume = PlayerPrefs.GetFloat("Volume", 1f);PlayerPrefs 很方便,但不要用它存完整背包、账号资产、密码、token 或敏感数据。Unity 官方也说明它本地不加密。
关键记忆
ToJson:对象变 JSON 字符串。 WriteAllText:字符串写入文件。 ReadAllText:读取文件内容。 FromJson:JSON 字符串变回对象。 persistentDataPath:Unity 给你的跨平台持久化目录。
学习顺序
先学 PlayerPrefs,再学 [Serializable] 数据类,然后学 JsonUtility,接着学 Application.persistentDataPath + File,最后再学 SaveManager、版本迁移、备份、云存档。
参考链接Unity PlayerPrefsUnity PlayerPrefs.SaveUnity Application.persistentDataPathUnity JsonUtilityUnity JsonUtility.ToJsonUnity JsonUtility.FromJsonMicrosoft File.WriteAllTextMicrosoft File.ReadAllTextMicrosoft BinaryFormatter 安全风险