You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Godot4重启游戏时加载游戏存档数据?

Godot4 实现玩家进度保存的实用方法

游戏里的临时变量重启就会丢失,必须把数据写入本地文件才能持久化,以下是几种常用的实现方式:

一、JSON格式存储(适配复杂数据结构)

如果你的进度包含关卡列表、道具背包这类嵌套/集合型数据,用JSON存储最灵活。

实现步骤:

  1. 定义要保存的数据结构
    先把需要持久化的内容整理成字典(用自定义类也可以,但字典更方便直接序列化):
var player_data = {
    "current_level": 3,
    "unlocked_levels": [1,2,3],
    "coins": 150,
    "inventory": ["sword", "shield"]
}
  1. 编写保存函数
    用FileAccess类把字典转成JSON字符串,写入user://目录下的文件——这个路径是Godot为每个玩家分配的专属存储区,跨平台且不会被游戏更新覆盖:
func save_progress():
    var json_string = JSON.stringify(player_data)
    var file = FileAccess.open("user://save_data.json", FileAccess.WRITE)
    if file:
        file.store_string(json_string)
        file.close()
        print("进度保存成功")
    else:
        print("保存失败:", FileAccess.get_error_message())
  1. 编写加载函数
    游戏启动或需要读取进度时,读取文件并解析JSON:
func load_progress():
    if FileAccess.file_exists("user://save_data.json"):
        var file = FileAccess.open("user://save_data.json", FileAccess.READ)
        if file:
            var json_string = file.get_as_string()
            file.close()
            var parse_result = JSON.parse_string(json_string)
            if parse_result.error == OK:
                player_data = parse_result.result
                print("进度加载成功")
            else:
                print("JSON解析失败:", parse_result.error_string)
        else:
            print("加载失败:", FileAccess.get_error_message())
    else:
        print("无存档,使用默认数据")

二、ConfigFile存储(适合简单键值对)

如果只是存关卡数、金币数这类单一键值对数据,用ConfigFile更省心,不用手动处理JSON序列化逻辑。

实现步骤:

  1. 保存数据
func save_progress():
    var config = ConfigFile.new()
    config.set_value("Player", "current_level", 3)
    config.set_value("Player", "coins", 150)
    config.set_value("Unlocks", "levels", [1,2,3])
    var error = config.save("user://save_config.cfg")
    if error == OK:
        print("保存成功")
    else:
        print("保存失败:", error)
  1. 加载数据
func load_progress():
    var config = ConfigFile.new()
    var error = config.load("user://save_config.cfg")
    if error == OK:
        current_level = config.get_value("Player", "current_level", 1)
        coins = config.get_value("Player", "coins", 0)
        unlocked_levels = config.get_value("Unlocks", "levels", [1])
        print("加载成功")
    else:
        print("加载失败,使用默认数据")

三、额外提示

  • 路径规范:永远用user://存储存档,不要硬编码绝对路径,Godot会自动适配Windows、Mac、Linux、移动端等不同平台的合法存储目录。
  • 防篡改处理:如果担心玩家修改存档,可以用Crypto类做简单加密,比如XOR加密:
func encrypt_string(text: String, key: String) -> String:
    var result = ""
    for i in range(text.length()):
        result += chr(text[i].ord() ^ key[i % key.length()].ord())
    return result

保存前加密JSON字符串,加载时解密再解析即可。

  • 自动保存时机:在关卡完成、获得道具、退出游戏这类关键节点自动调用保存函数,避免玩家忘记手动保存的麻烦。

内容的提问来源于stack exchange,提问作者Coding_Guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:53:17