Save Lite 是一个免费的,MIT 许可的保存系统插件,适用于 Godot 4.5 和更新版本(测试于 4.5.2 和 4.7.2)。您在检查器中勾选属性,调用两个函数,得到一个签名的、崩溃安全的、永远不会运行代码的保存槽,适用于桌面和 Web 构建。
一些背景:我开始的每个项目都以手写的 save_game() 结尾,逐渐变成了一道道的 spaghetti,我的 Web 构建也经常会打破它。因此,我创建了这个插件,决定分享它。
请注意:这是我的插件,我使用了大量的 AI(Claude Code)帮助我创建它。它写了大部分的代码和文档。然而,我决定了它应该做什么,审查了结果,并在 4.5.2 和 4.7.2 上,分别在 Windows 和 Web 构建上,运行了测试套件。
它是如何工作的:
- 在你要保存的东西下(玩家,宝箱,等等)添加一个
SaveLiteComponent节点。 - 在检查器中勾选属性(位置,健康,硬币等等)。无法保存的东西会以灰色显示,原因会显示。
- 然后:```
gdscript
var code: int = await SaveLite.save_slot("slot1") # 后面
后面
var code: int = await SaveLite.load_slot("slot1")
``
设置,如音量,放入set_global/get_global` 中,如果某些数据不存储在节点上,可以注册一个小对象,带有两个方法。
我关注了以下几点:
- 保存文件是纯 JSON,永远不会被加载为对象,因此,分享的保存文件无法在你的游戏中运行代码。
- 文件是签名的,因此,损坏或手动编辑的文件会被拒绝,而不是部分加载。
- 不是反作弊的,游戏中的密钥会被发送。
- 在桌面上,它会先写入临时文件,因此,崩溃中保存不会清除槽。
- 在 Web 构建中(IndexedDB),你只需要
await每个调用。 - 仅使用 GDScript,未依赖任何库或网络功能。
它不做以下几件事情:
- 只有一个保存槽(加上全局值),因此适合于竞技游戏,益智游戏或简单的“继续”按钮。
- 没有自动保存,场景状态,自定义资源类型,C# API。
一些人可能会问的问题:
- 为什么不使用 ResourceSaver? 加载一个
.tres文件从未信任的文件中可能会运行嵌入的脚本。因此,我选择了纯值。 - Godot 4.4 或更早版本? 不支持,因为它是基于 4.5 API 的。
- 如果我需要更多槽位? 我也有一版付费版,有更多功能,它可以读取 Lite 保存,因此,使用 Lite 不会锁定你。然而,Lite 是独立完成的。
链接:https://cardeiro-studio.itch.io/save-lite
反馈非常欢迎,特别是检查器工作流和我没有测试的浏览器。bug 报告也很有帮助。
评论 (0)