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

时间:2016-11-19 15:53:46

标签: c# variables serialization unity3d unity5

我正在为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 个答案:

答案 0 :(得分:5)

只是为了把这一点带回家

1)在Unity中

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

我甚至无法讨论为什么这么做。它就是这样的!

2)一般来说,游戏/手机的这些日子应该

使用JSON

故事结束。幸运的是,这非常容易。

3)要转换回JSON,

正是@Programmer所说的。

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

4)最后为了保存,老实说没有错:

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

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

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

(Notte:在任何情况下都不会在Unity中使用“streamwriter”。保存/读取文本文件非常简单。)

重复。做>> NOT<<在Unity中触摸,思考或使用“序列化”!无论如何,永远!

享受生活!