繁体   English   中英

在 Unity3D 中制作的游戏中保存游戏进度的最佳实践是什么?

[英]What is best Practice to save Game Progress in a Game made in Unity3D along different Versions for Android and iOS

为简单的 2D 游戏保存游戏进度的最佳做法是什么? “进度”是指非常简单的值,例如“收集的项目数量”(int)、“高分”(int)、“货币数量”(float)和“头像解锁”(bool)。 没有世界地图 state 或任何大的东西要保存。 我使用了 playerprefs ,但这是为偏好而设计的,许多专家应该避免使用。 这就是为什么我现在想改变它。

我读了这个线程: Stackoverflow Question ,但我无法确定适合我的情况的最佳解决方案,因为没有对建议的方法进行比较。

我的要求很简单:

  • 适用于 iOS 和 Android
  • 发布应用程序的新版本时不会被删除
  • 易于在脚本中使用,因为我们在很多地方都引用了变量

有什么建议么?

Personnaly,我喜欢直接写入文件。 它适用于所有平台,不会在应用更新时删除,并且您可以完全控制访问数据的方式。 轻松添加、删除、编辑内容,轻松处理多种保存状态。

你可以用一个简单的 class 来做到这一点,比如这个:

public static class FileUtils
{
    public static void WriteToFile(string fileName, string json)
    {
        var path = GetFilePath(fileName);
        var stream = new FileStream(path, FileMode.Create);

        using (var writer = new StreamWriter(stream))
            writer.Write(json);
    }

    public static string ReadFromFile(string fileName)
    {
        var path = GetFilePath(fileName);
        if (File.Exists(path))
        {
            using (var reader = new StreamReader(path))
                return reader.ReadToEnd();
        }

        Debug.LogWarning($"{fileName} not found.");
        return null;
    }

    public static string GetFilePath(string fileName)
    {
        return Path.Combine(Application.persistentDataPath, fileName);
    }
}

然后,你只需要一个可序列化的 class 或结构来保存,这里我使用 JSON:

    [Serializable]
    public class UserData
    {
        public string userName;
        public string profilePictureRef;

        public UserData(string userName, string profilePictureRef)
        {
            this.userName = userName;
            this.profilePictureRef = profilePictureRef;
        }
    }

    public void SaveUserData(UserData data)
    {
        var jsonData = JsonUtility.ToJson(data);
        FileUtils.WriteToFile(_fileName, jsonData);
    }

    public void LoadUserData()
    {
        var jsonData = FileUtils.ReadFromFile(_fileName);
        _data = JsonUtility.FromJson<UserData>(jsonData);
    }

您甚至可以从服务器获取一些 JSON 并将其保存在本地。 也许您想要“模糊”内容,以便玩家无法手动编辑它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM