本人英语不好,只是需要详细了解下,就顺手随意的翻译一下。
为了保持明确性,部分专有名词不进行翻译,且部分使用简称。
- SP: Save Point. 存档点。
- SPC: Save Point Command. 存档点命令。
- SPL: Save Point Loaded event handler. 存档点加载事件处理器。
- SM: Save Menu. 存档菜单。
介绍
注意:存档系统现在是测试版,以从社区获得反馈。在未来的更新中可能会有突破性的改变。
Fungus 存档系统提供一个简单的方式存储和加载 Flowchart 的执行状态。
这个教学视频展示了如何快速的添加保存功能。
存档系统通过存储一系列 Save Points (之后用 SP 指代) 作为玩家的游戏进度,以建立一个 Save History. 一个基础的 Save Menu UI 允许玩家通过 Save History 存档、加载、重新开始、倒退和快进。
一个 SP 通过 Flowchart 中的 Save Point Command (之后用 SPC 指代) 创建。当一个 SP 被加载时,会在执行 SPC 后立刻恢复执行游戏。存档系统将负责在每个 SP 恢复 Flowchart 的变量状态,你还可以通过 Save Point Loaded event handler 在加载特定 SP 时得到通知。
保存游戏的示例场景
以下内容为介绍示例场景的功能,不进行翻译。
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 对象能在层级窗口的根层级下看到。这个对象控制玩家和存档系统交互的 UI 菜单。Save Menu 是一个单例对象,能跨场景存在,因此你只需要在第一个场景添加一个。
选择 Tools > Fungus > Create > Save Menu 添加 Save Menu.
创建 Save Points
SP 通过执行 Flowchart 中的 SPC 创建。
为了在示例场景中了解过程,确保 Flowchart 窗口显示(Tools > Fungus > Flowchart Window), 然后选择层级窗口中的 Flowchart 对象并选择其中的每一个 Block. 每个 Block 的第一个命令都是一个 SPC (通过 Flow > Save Point 添加)。
当每个 SPC 执行时,都会在 Save History 中添加一个新的 SP. 当你加载游戏时,在创建该 SP 的 SPC 后恢复执行游戏。
在示例场景中,进入 Flowchart 窗口选择 "Start" Block, 并选择位于命令列表顶部的 SPC, 可以发现 Is Start Point 属性启用。这是 Flowchart 中唯一启用该属性的 SPC. 在场景中应该只有一个 Start Point.
当开始新游戏时,Fungus 会寻找一个启用了 Is Start Point 属性的 SPC 并执行它。当加载游戏时,Fungus 会在相关的 SPC 开始执行并忽略 Start Point.
这意味着如果你的游戏支持保存,每个场景都应该总是只有一个启用了 Is Start Point 属性的 SPC.
注意:Game Started event handler 在新游戏和加载游戏时都会激活,这通常不会是你所期望的,因此避免在支持保存的游戏中使用它。
处理 Save Point Loaded events
当加载游戏时,为了确保场景处于正确的状态,你经常需要做一些额外工作。例如,摄像机也许需要移动到合适的位置,或者播放特定的音乐。通过 Save Point Loaded event handler (之后用 SPL 指代) 能简单的完成这些工作。
在示例场景中,在 Flowchart 中选择 "Play Music 1" Block, 能看到一个 SPL. 这会在 SP Keys 列表中的任意一个 SP 加载时执行 Block. 在这个例子中,我们简单的播放了一段音乐,但你可以做任何需要的配置。
SPL 在一个匹配的 SPC 执行时(需要启用 Fire Event 属性)也会激活。这允许你将所有场景配置命令放置到单个共享的 Block 中,当第一次到达 SPC 或在 SP 加载时,将调用该共享块。
保存 Flowchart 变量
每个 SP 能保存当时的 Flowchart 变量。你可以用一个 Save Data 对象让存档系统知晓哪些 Flowcharts 被包含其中。注意目前只保存 Boolean, Integer, Float, String 变量。
在示例场景中,Save Data 对象能在层级窗口中看到。Flowcharts 属性包括要保存的 Flowchart 对象列表。
通过 Tools > Fungus > Create > Save Data 添加一个 Save Data 对象到你的场景。你可以添加任意数量的 Flowcharts 到列表中,但确保每一个都有独一无二的名字,否则加载不会正确工作。
如果你对拓展存档系统支持的其它数据类型感兴趣(除了 Flowchart 变量),你可以修改或继承 SaveData 组件去实现。
Save Menu
Save Menu (以后用 SM 代表) 是一个简单的允许玩家和存档系统交互的 UI. 这一部分将解释每个按钮的功能和如何配置 SM 属性。
Save Menu 属性
有四个你可能想要配置的主要属性。
- Save Data Key: 字符串类型的键,用于保存游戏数据在 Player Prefs 中。如果你在一个 Unity 项目中定义了多个游戏,请使用独一无二的键。
- Load On Start: 在启动时自动加载。
- Auto Save: 在每个 SP 自动保存游戏到硬盘上。当这个选项启用时,Save 和 Load 按钮将失效。
- Restart Deletes Save: 当玩家重新开始游戏时,从硬盘删除游戏数据。这在你测试游戏时非常有用,能确保你每次都从空白的游戏状态开始。
注意:如果你的游戏使用了多个场景(通过 Load Scene 命令),确保在 Build Settings 中添加所有场景。
保存按钮
按下保存按钮,将使当前的 Save History 序列化为 Json 文本,并通过 PlayerPrefs 持久化储存下来。
加载按钮
按下加载按钮,将使之前保存的 Json 数据反序列化,并用于填充 Save History. 使用最近的 SP 通过以下顺序恢复游戏。
- 加载保存在 SP 中的场景,即便它就是当前加载的场景。
- 恢复 Flowchart 变量。
- 调用 SPL 并在核实的 SPC 后开启 Flowchart 的执行。
回退和快进按钮
允许你在 Save History 的 SP 之间后退和前进。
每次移动只需加载存储在 Save History 中特定点上的 SP. 这本身不会修改 Save History 或持久化任何数据。然而,如果你退回到更早的 SP 并重新开始游玩,下次 SPC 执行会导致所有更早的 SP 永久丢失。
重新开始按钮
清空 Save History 并加载开始场景。开始场景是 SM 被第一次初始化的场景。
游戏启动
记住玩家能在任何时候选择加载或重启游戏。遵循以下简单的规则,以确保游戏启动在任何情况下都正常进行。
- 每个场景都应该有一个启用了 Is Start Point 属性的 SPC. 如果你有多个场景,确保每个场景都有一个 Start SP 定义,并且是场景中执行的第一个命令。
- 避免使用 Game Started event handler. 这只会在游戏第一次游玩时正常的工作,而不会在加载游戏时。在加载游戏后,你会想要从 SP 开始执行,而不是又一次从 Flowchart 的起点开始。
- 当你想要在某个特定的 SP 加载时,执行一个 Block, 使用 SPL. 这些事件处理器会在恢复执行前被调用,因此它给了你一个在游戏恢复游玩之前,配置工作的机会。
术语
Save Point
一个 SP 是游戏在某个时间点的状态的快照。每个 SP 记录了当前场景,当时的 Flowchart 执行(在 SPC 时),和当时的 Flowchart 变量的值。目前只支持 Boolean, Interger, Float, String 变量。
Save Point Command
SPC 被用于在 Flowchart 执行中创建一个 SP. 每个单独的 SPC 会有一个独一无二的 SP Key. Resume On Load 选项会导致在加载 SP 后从此点恢复执行。
Save Point Key
SP Key 是一个独一无二的字符串,作为每个 SP 的标识。默认下,父 Block 的名字被用于 SP Key, 但你也可以使用自定义的键(例如,在一个 Block 中有多条 SPC)。
注意:每个键必须在每个场景中都是独一无二的,否则无法正确加载。
Save History
Save History 包含一个之前记录的 SP 的列表,按时间顺序存储。当一个 SPC 执行时,一个新的 SP 被创建,并添加到 Save History 中。
为了在运行时可视化 Save History, 可以在层级中拓展 SM 对象。选择 Save Menu > Panel > Debug View 并激活该游戏对象。一个 Save History 中的 SP 总结,会被显示在一个文本窗口中。