Posts Tagged ‘Unity’

在Unity上做序列化處理

Friday, October 7th, 2016


最近在實做Game Data Serialization的部份。一開始是用Unity內建的Object Serialization機制,但是後來發現風險有點高。因為只要要做序列化的物件的其中某個變數”名稱”一改,原本已經儲存的檔案。在做Deserialization時,就會出現Exception… (雖然這種情形不應該發生,可是真的很難保證會不會上架之後有一天突然忘記,不小心改到某個變數名稱)

雖然我有加Try Catch去處理Exception發生時的流程 – 重新產生一個新存檔,遊戲還不致於到crash完全不能玩的程度。但是這(遺失遊戲進度)對玩家來說是非常嚴重的錯誤!! 應該會有95%以上的玩家一發現辛辛苦苦玩半天的遊戲存檔不見了,遊戲可能就會被直接砍掉GG了… (應該是BG(Bad Game)才對 lol)

所以這幾天改用自己手動寫序列化成JSON格式的方式。原因有三: 一是我對JSON格式非常熟悉,二是我有打算將存檔透過Http Request送到Server做儲存備份。一旦玩家的本機資料真的遺失了,還是可以透過Server上的備份存檔回朔進度玩。而且玩家可以從Android切換到iOS或其他平台玩,無痛轉移遊戲進度。所以用純文字的JSON格式會比較好。三是如果日後要改物件的變數名稱,就還是可以改。只要轉成JSON string時的key name不變就好,這樣就不會出現Deserialization Exception了。

本來我是用SimpleJSON這個Library來做JSON格式的序列化處理。結果後來發現它序列化出來的JSON string根本不符合標準 – boolean, int, float, double這幾種C#的native type都會被轉成JSON String格式,而非JSON Number格式。所以我又改用了另一個Library – LitJSON,功能比較強,且序列化出來的JSON格式是標準的。今天剛把所有相關的物件改成用這個Library做序列化,跑起來總算沒啥問題了… :D