2016-11-19 122 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

相關問題