我寫了一個SaveLoad
類,其中包含一個Savegame
類,它有一串ints,double,bools,還有一些更復雜的東西,比如自寫的類對象數組。Unity/C#Savegame遷移
保存遊戲對象正在創建,序列化和AES保存加密,反之亦然加載 - 迄今爲止,這麼好。
我現在面臨的問題是,如果有新的變量(在較新版本的遊戲中)必須存儲和加載,遊戲在加載時崩潰,因爲新變量無法加載正確(因爲它們不包含在舊的保存文件中)。例如。 ints和double包含默認的0,而數組未初始化,因此爲null。
我目前的「解決方案」:對於每個正在加載的變量,檢查它是否不包含特定的值(我在Savegame
類中設置)。 例如:在Savegame
我設置
public int myInt = int.MinValue;
,當加載,我檢查:
if(savegame.myInt != int.MinValue){
//load successful
}else{
//load failed
};
到目前爲止是這種用於int和double,但一旦我打的第一布爾,我意識到,對於每個變量,我必須找到一個「沒有意義」(通常不可達)的值,因此是一個失敗的負載。 =>對於布爾的低劣方法。
現在我可以繼續前進,將所有的bool爲int,但這變醜...
必須有一個更清潔和/或更聰明地解決了這個。也許某種存儲遊戲遷移器?如果有一個很好的免費插件,這對我來說也可以,但我更喜歡代碼解決方案,這對於其他類似問題的人可能也更有幫助。
在此先感謝! :)
保存和加載數據已在此回答了很多次網站上的新問題應標記爲重複。使用[JsonUtility]將數據轉換爲Json(http://stackoverflow.com/questions/36239705/deserialization-of-json-using-minijson-in-unity-c-sharp/36244111#36244111),使用AES對其進行加密然後用[PlayerPrefs](https://docs.unity3d.com/ScriptReference/PlayerPrefs.html)保存。加載數據時,請執行後面提到的步驟。而已。 – Programmer
我已閱讀了多篇文章。他們沒有詳細討論如何處理舊的保存文件。這裏的問題不是保存和加載本身,而是特別處理舊的保存文件以避免造成任何問題。 – Tavados
首先問問自己:遊戲的新版本應該能夠讀取過時的保存文件嗎?如果是,則決定處理該問題的邏輯,然後在代碼中實現該邏輯。一個例子可能是「如果某個值不存在,則將其初始化爲默認狀態(0,emptylist,dollars.None等)。 –