c# - 如何在 Unity3D 中保存自定义变量?

标签 c# variables serialization unity-game-engine

我正在为 Unity3D 中的游戏开发一个保存和加载系统。像位置这样的基础知识很简单,我就有

 public void Save() {

     PlayerPrefs.SetFloat ("X", transform.position.x);
     PlayerPrefs.SetFloat ("Y", transform.position.y);
     PlayerPrefs.SetFloat ("Z", transform.position.z);

 }

 public void Load() {

     float x = PlayerPrefs.GetFloat ("X");
     float y = PlayerPrefs.GetFloat ("Y");
     float z = PlayerPrefs.GetFloat ("Z");

     transform.position = new Vector3 (x, y, z);

 }

但是接下来是我想保存自定义变量的部分。 包含它们的类如下所示:

     [SerializeField] private Stat health; 
     public static Stat Health { get; set; }
     [SerializeField] private Stat exp;
     public static Stat Exp { get; set; }
     [SerializeField] private Stat oxygen;
     public static Stat Oxygen { get; set; }
     [SerializeField] private Stat playerLevel;
     public static Stat PlayerLevel { get; set; }

所以我的问题是,如何在 SaveLoad 脚本中获取这些统计数据的值?

最佳答案

只是为了让大家明白这一点

1) 在统一中

完全忘记序列化。就这么简单。

我什至懒得讨论原因。就是这样!

2)一般来说,现在在游戏/移动设备中您应该

使用 JSON

故事结束。幸运的是,这非常简单。

3)要前后转换为 JSON,

完全按照@Programmer所说的去做。

https://stackoverflow.com/a/40097623/294884

4)最后要保存的是,老实说没有什么问题:

只需使用 PlayerPrefs 来保存长 JSON 字符串。不用担心。

请注意,如果您确实只想将其保存为文本文件,这很好,将其保存为文本文件非常容易:

就这样做:https://stackoverflow.com/a/35941579/294884

(注意:无论出于何种原因,切勿在 Unity 中使用“streamwriter”。保存/读取文本文件是完全微不足道的。)

重复。做>>不要<<触摸、思考或在Unity中使用“序列化”!无论出于何种原因,永远!

享受生活!

关于c# - 如何在 Unity3D 中保存自定义变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40694869/

相关文章:

c# - 添加三个静态字段

powershell - 如何通过 PowerShell 中的 splatting 将开关参数作为变量传递?

javascript - 通过 JQuery Click 函数传递变量

c# - k__BackingField 在 C# 中删除(通过 Swashbuckle/Swagger 看到)

c# - 使用 XmlSerializer 反序列化 List<int> 导致额外的项目

c# - 在NET核心中以有效的方式将一种数据类型的数组转换为另一种数据类型的数组?

c# - 如何用直接实例分配替换列表项

c# - 播放未知时间的正弦波

variables - gdb 在生成线程后无法访问变量

c++ - 将 POD 结构/结构 vector 复制到 vector<unsigned char> 的最优雅方式