Skip to content

数据与存档

unity-csharp-data-save-system

基础概念

数据是游戏当前状态,比如金币、等级、背包、任务进度。 存档是把这些状态写到本地文件、PlayerPrefs 或服务器,等玩家下次打开游戏时再读回来。

最常见选择:

  1. PlayerPrefs:存少量设置,比如音量、语言、画质。
  2. JSON 文件:存完整单机进度,比如关卡、金币、背包、任务。
  3. ScriptableObject:更适合做配置表,不适合在正式 Player 里当运行时存档写入。
  4. 服务器 / 云存档:存账号资产、充值、排行榜、跨设备进度。

最小存档类

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();
}

注意:存档类尽量只放“纯数据字段”,不要放 GameObjectTransformMonoBehaviour

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 安全风险

文章评价

读完这篇,留下你的看法

暂无审核通过的评价。

登录账号后才能评价。

本站访客数0总站访问量0本页访问量0