本人英語不好,只是需要詳細(xì)了解下填物,就順手隨意的翻譯一下纹腌。
為了保持明確性,部分專有名詞不進(jìn)行翻譯滞磺,且部分使用簡稱升薯。
- SP: Save Point. 存檔點(diǎn)。
- SPC: Save Point Command. 存檔點(diǎn)命令击困。
- SPL: Save Point Loaded event handler. 存檔點(diǎn)加載事件處理器涎劈。
- SM: Save Menu. 存檔菜單。
介紹
注意:存檔系統(tǒng)現(xiàn)在是測試版阅茶,以從社區(qū)獲得反饋蛛枚。在未來的更新中可能會有突破性的改變。
Fungus 存檔系統(tǒng)提供一個簡單的方式存儲和加載 Flowchart 的執(zhí)行狀態(tài)脸哀。
這個教學(xué)視頻展示了如何快速的添加保存功能蹦浦。
存檔系統(tǒng)通過存儲一系列 Save Points (之后用 SP 指代) 作為玩家的游戲進(jìn)度,以建立一個 Save History. 一個基礎(chǔ)的 Save Menu UI 允許玩家通過 Save History 存檔撞蜂、加載盲镶、重新開始、倒退和快進(jìn)蝌诡。
一個 SP 通過 Flowchart 中的 Save Point Command (之后用 SPC 指代) 創(chuàng)建溉贿。當(dāng)一個 SP 被加載時,會在執(zhí)行 SPC 后立刻恢復(fù)執(zhí)行游戲浦旱。存檔系統(tǒng)將負(fù)責(zé)在每個 SP 恢復(fù) Flowchart 的變量狀態(tài)宇色,你還可以通過 Save Point Loaded event handler 在加載特定 SP 時得到通知。
保存游戲的示例場景
以下內(nèi)容為介紹示例場景的功能颁湖,不進(jìn)行翻譯宣蠕。
To see how the save system works, open the example scene FungusExamples/Savegame/SaveGame.unity
Press play in Unity and click through the short story. The Save Menu can be accessed at any time by clicking the small gears icon in the top right. Try saving, loading, rewinding, fast forwarding and restarting at different points as you play through the story. Also try saving the game in the middle of the story and stopping the game. Press Play again and notice that the game resumes where you left off.
The Save Menu also supports an auto-saving mode where the game is saved to disk at every Save Point. You can enable this by selecting the Save Menu object and selecting the Auto Save property. The Save and Load buttons are disabled when using Auto Save.
The following are the key elements that are used to implement saving in this example scene.
Save Menu UI
Save Menu 對象能在層級窗口的根層級下看到。這個對象控制玩家和存檔系統(tǒng)交互的 UI 菜單爷狈。Save Menu 是一個單例對象植影,能跨場景存在,因此你只需要在第一個場景添加一個涎永。
選擇 Tools > Fungus > Create > Save Menu 添加 Save Menu.
創(chuàng)建 Save Points
SP 通過執(zhí)行 Flowchart 中的 SPC 創(chuàng)建思币。
為了在示例場景中了解過程鹿响,確保 Flowchart 窗口顯示(Tools > Fungus > Flowchart Window), 然后選擇層級窗口中的 Flowchart 對象并選擇其中的每一個 Block. 每個 Block 的第一個命令都是一個 SPC (通過 Flow > Save Point 添加)。
當(dāng)每個 SPC 執(zhí)行時谷饿,都會在 Save History 中添加一個新的 SP. 當(dāng)你加載游戲時惶我,在創(chuàng)建該 SP 的 SPC 后恢復(fù)執(zhí)行游戲。
在示例場景中博投,進(jìn)入 Flowchart 窗口選擇 "Start" Block, 并選擇位于命令列表頂部的 SPC, 可以發(fā)現(xiàn) Is Start Point 屬性啟用绸贡。這是 Flowchart 中唯一啟用該屬性的 SPC. 在場景中應(yīng)該只有一個 Start Point.
當(dāng)開始新游戲時,F(xiàn)ungus 會尋找一個啟用了 Is Start Point 屬性的 SPC 并執(zhí)行它毅哗。當(dāng)加載游戲時听怕,F(xiàn)ungus 會在相關(guān)的 SPC 開始執(zhí)行并忽略 Start Point.
這意味著如果你的游戲支持保存,每個場景都應(yīng)該總是只有一個啟用了 Is Start Point 屬性的 SPC.
注意:Game Started event handler 在新游戲和加載游戲時都會激活虑绵,這通常不會是你所期望的尿瞭,因此避免在支持保存的游戲中使用它。
處理 Save Point Loaded events
當(dāng)加載游戲時翅睛,為了確保場景處于正確的狀態(tài)声搁,你經(jīng)常需要做一些額外工作。例如捕发,攝像機(jī)也許需要移動到合適的位置疏旨,或者播放特定的音樂。通過 Save Point Loaded event handler (之后用 SPL 指代) 能簡單的完成這些工作扎酷。
在示例場景中檐涝,在 Flowchart 中選擇 "Play Music 1" Block, 能看到一個 SPL. 這會在 SP Keys 列表中的任意一個 SP 加載時執(zhí)行 Block. 在這個例子中,我們簡單的播放了一段音樂霞玄,但你可以做任何需要的配置骤铃。
SPL 在一個匹配的 SPC 執(zhí)行時(需要啟用 Fire Event 屬性)也會激活拉岁。這允許你將所有場景配置命令放置到單個共享的 Block 中坷剧,當(dāng)?shù)谝淮蔚竭_(dá) SPC 或在 SP 加載時,將調(diào)用該共享塊喊暖。
保存 Flowchart 變量
每個 SP 能保存當(dāng)時的 Flowchart 變量惫企。你可以用一個 Save Data 對象讓存檔系統(tǒng)知曉哪些 Flowcharts 被包含其中。注意目前只保存 Boolean, Integer, Float, String 變量陵叽。
在示例場景中狞尔,Save Data 對象能在層級窗口中看到。Flowcharts 屬性包括要保存的 Flowchart 對象列表巩掺。
通過 Tools > Fungus > Create > Save Data 添加一個 Save Data 對象到你的場景偏序。你可以添加任意數(shù)量的 Flowcharts 到列表中,但確保每一個都有獨(dú)一無二的名字胖替,否則加載不會正確工作研儒。
如果你對拓展存檔系統(tǒng)支持的其它數(shù)據(jù)類型感興趣(除了 Flowchart 變量)豫缨,你可以修改或繼承 SaveData 組件去實現(xiàn)。
Save Menu
Save Menu (以后用 SM 代表) 是一個簡單的允許玩家和存檔系統(tǒng)交互的 UI. 這一部分將解釋每個按鈕的功能和如何配置 SM 屬性端朵。
Save Menu 屬性
有四個你可能想要配置的主要屬性好芭。
- Save Data Key: 字符串類型的鍵,用于保存游戲數(shù)據(jù)在 Player Prefs 中冲呢。如果你在一個 Unity 項目中定義了多個游戲舍败,請使用獨(dú)一無二的鍵。
- Load On Start: 在啟動時自動加載敬拓。
- Auto Save: 在每個 SP 自動保存游戲到硬盤上邻薯。當(dāng)這個選項啟用時,Save 和 Load 按鈕將失效乘凸。
- Restart Deletes Save: 當(dāng)玩家重新開始游戲時弛说,從硬盤刪除游戲數(shù)據(jù)。這在你測試游戲時非常有用翰意,能確保你每次都從空白的游戲狀態(tài)開始木人。
注意:如果你的游戲使用了多個場景(通過 Load Scene 命令),確保在 Build Settings 中添加所有場景冀偶。
保存按鈕
按下保存按鈕醒第,將使當(dāng)前的 Save History 序列化為 Json 文本,并通過 PlayerPrefs 持久化儲存下來进鸠。
加載按鈕
按下加載按鈕稠曼,將使之前保存的 Json 數(shù)據(jù)反序列化,并用于填充 Save History. 使用最近的 SP 通過以下順序恢復(fù)游戲客年。
- 加載保存在 SP 中的場景霞幅,即便它就是當(dāng)前加載的場景。
- 恢復(fù) Flowchart 變量量瓜。
- 調(diào)用 SPL 并在核實的 SPC 后開啟 Flowchart 的執(zhí)行司恳。
回退和快進(jìn)按鈕
允許你在 Save History 的 SP 之間后退和前進(jìn)。
每次移動只需加載存儲在 Save History 中特定點(diǎn)上的 SP. 這本身不會修改 Save History 或持久化任何數(shù)據(jù)绍傲。然而扔傅,如果你退回到更早的 SP 并重新開始游玩,下次 SPC 執(zhí)行會導(dǎo)致所有更早的 SP 永久丟失烫饼。
重新開始按鈕
清空 Save History 并加載開始場景猎塞。開始場景是 SM 被第一次初始化的場景。
游戲啟動
記住玩家能在任何時候選擇加載或重啟游戲杠纵。遵循以下簡單的規(guī)則荠耽,以確保游戲啟動在任何情況下都正常進(jìn)行。
- 每個場景都應(yīng)該有一個啟用了 Is Start Point 屬性的 SPC. 如果你有多個場景比藻,確保每個場景都有一個 Start SP 定義铝量,并且是場景中執(zhí)行的第一個命令伊履。
- 避免使用 Game Started event handler. 這只會在游戲第一次游玩時正常的工作,而不會在加載游戲時款违。在加載游戲后唐瀑,你會想要從 SP 開始執(zhí)行,而不是又一次從 Flowchart 的起點(diǎn)開始插爹。
- 當(dāng)你想要在某個特定的 SP 加載時哄辣,執(zhí)行一個 Block, 使用 SPL. 這些事件處理器會在恢復(fù)執(zhí)行前被調(diào)用,因此它給了你一個在游戲恢復(fù)游玩之前赠尾,配置工作的機(jī)會力穗。
術(shù)語
Save Point
一個 SP 是游戲在某個時間點(diǎn)的狀態(tài)的快照。每個 SP 記錄了當(dāng)前場景气嫁,當(dāng)時的 Flowchart 執(zhí)行(在 SPC 時)当窗,和當(dāng)時的 Flowchart 變量的值。目前只支持 Boolean, Interger, Float, String 變量寸宵。
Save Point Command
SPC 被用于在 Flowchart 執(zhí)行中創(chuàng)建一個 SP. 每個單獨(dú)的 SPC 會有一個獨(dú)一無二的 SP Key. Resume On Load 選項會導(dǎo)致在加載 SP 后從此點(diǎn)恢復(fù)執(zhí)行崖面。
Save Point Key
SP Key 是一個獨(dú)一無二的字符串,作為每個 SP 的標(biāo)識梯影。默認(rèn)下巫员,父 Block 的名字被用于 SP Key, 但你也可以使用自定義的鍵(例如,在一個 Block 中有多條 SPC)甲棍。
注意:每個鍵必須在每個場景中都是獨(dú)一無二的简识,否則無法正確加載。
Save History
Save History 包含一個之前記錄的 SP 的列表感猛,按時間順序存儲七扰。當(dāng)一個 SPC 執(zhí)行時,一個新的 SP 被創(chuàng)建陪白,并添加到 Save History 中颈走。
為了在運(yùn)行時可視化 Save History, 可以在層級中拓展 SM 對象。選擇 Save Menu > Panel > Debug View 并激活該游戲?qū)ο罂皆蟆R粋€ Save History 中的 SP 總結(jié)疫鹊,會被顯示在一個文本窗口中袖瞻。