創作內容

12 GP

【Unity】存檔做法

作者:Kumamon│2017-05-01 15:53:20│巴幣:24│人氣:10250
大家好我是沒路~~   今天來分享個Unity存檔的方式:

Unity本身有提供PlayerPrefs類別提供存檔 , 可支援的類型有:
PlayerPrefs.SetFloat()--浮點數
PlayerPrefs.SetInt()--整數
PlayerPrefs.SetString()--字串

每筆資料需要帶一個Key , 假如今天要存一個名為"血量"的變數,可能可以打成這樣:

存檔----
int hp = 987;
PlayerPrefs.SetInt( "Hp",hp );

讀檔----
int hp = PlayerPrefs.GetInt( "Hp" );

每一個變數都需帶一個key , 如果今天要做個多存檔的遊戲會變得頗麻煩 , 可能要對Key去下副標題,像這樣 "save1_hp" , save2_hp . . . 想刪除save1的資料還得撈出所有副標為save1的變數來做刪除. 真的處理起來還挺麻煩的!

多存檔的遊戲機制(偷一下仙劍的圖來用)

PlayerPrefs的詳細說明可以估狗[ unity 存檔]有蠻多資訊的.

這邊介紹另外一種<使用序列化的方式來進行存檔>
"序列化"簡單的說是將存在記憶體階段時的變數寫進系統檔案的方式 , 通常可以寫成xml字串或是binary二進制的格式---有興趣的可以逛逛:
https://msdn.microsoft.com/zh-tw/library/4abbf6k0(v=vs.120).aspx

※現在正文開始
簡單說一下原理 , 將打算要存檔的變數都寫進一個Class裡 , 要存檔時我們會將這個Class打成個一個序列化後的字串,存進  >>PlayerPrefs.SetString() 裡
讀檔時再利用 >> PlayerPrefs.GetString() 來反序列化 , 將其還原成類別, 如此一來只需要一個
key 就可以處理所有的存檔了~~


實作:
定義一個Class來存檔 , 以下叫PlayerSaveData.cs
記得引入 using System.Runtime.InteropServices;
用途是:
InteropServices參考



序列化與反序列化:



讀檔:
PlayerSaveData saveData = new PlayerSaveData();
saveData  = SaveLoadData.LoadData();


存檔
SaveLoadData.SaveData( saveData   );

能存的類型非常多 ,除了一些基本資料形態、陣列..  連類別都存的進去 , 但一些比較複雜的結構
如Dictionary List 就建議不要存 , 將他寫成陣列 , 讀檔時再還原 , 比較確保資料正確性.

大概做法就醬~
※老師說不要一直複製貼上,要自己打一遍.
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3562034
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 2 篇留言

小蟲蟲OuO
Hello~

01-29 10:30

迷途巴哥
u值文

03-06 11:46

我要留言提醒:您尚未登入,請先登入再留言

12喜歡★sirua 可決定是否刪除您的留言,請勿發表違反站規文字。

後一篇:由水獺愛好者製作的小遊戲...

追蹤私訊切換新版閱覽

作品資料夾

leon770530巴友
我的小屋首頁共有4篇健身相關證照心得文,對健身有興趣的朋友可以來看看喔!看更多我要大聲說7小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】