2016-11-19 125 views
2

我正在Unity3D中为我的游戏开发一个保存和加载系统。像位置这样的基础很简单,我只需要如何在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脚本这些统计数据的价值?

+0

“保存”是什么意思?保存在哪里? –

+1

这已被询问并回答了很多次。只能找到我已经回答的一个。删除'{get;组; }从它然后按照[这](http://stackoverflow.com/a/40097623/3785314) – Programmer

+1

确切地说,这是一个超复制。做程序员所说的话。 – Fattie

回答

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”,这对保存/读取文本文件来说是微不足道的。)

重复。请执行>>不是< <在Unity中触摸,思考或使用“序列化”!出于任何原因,永远!

享受生活!

+1

我同意和我从来都不能更好地强调更好的序列化是如何统一的! – Bijan

+0

如果你指的是[SerializableField],它只是为了从Unity检查器访问它而不公开它。我试图使用PlayerPrefs保存数据,但它不能识别Stat变量,这是一个自定义变量。有什么方法可以使用PlayerPrefs来使用它?如果不是,我如何使用PlayerPrefs将其保存到Json中? – Nech

+0

注意,一般只使用“public”而不是[SerializeField]。 – Fattie

相关问题