Repository navigation
3.10.0
版本概述:本轮加固 JSON 存储、Variant JSON 编码和确定性随机状态的 64 位整数处理,避免 Godot 4.6 JSON 解析造成 checksum 误报或回放状态精度丢失;同时新增纯数据后台工作协调器,标准化 CPU/IO 线程工作、ResourceLoader 线程加载和主线程应用边界。
🚀 新增特性
- 标准库 jobs 目录新增
GFBackgroundWorkUtility与GFBackgroundWorkTask,用于提交纯 Variant CPU/IO 后台工作、合并 threadedResourceLoader请求、限制并发线程数量、协作式取消、主线程应用回调和调试快照。
🔄 机制更改
GFSeedUtility.get_full_state()现在输出带state_schema_version = 2的状态字典,并将global_seed、rng_state与分支计数保存为十进制字符串,确保默认 JSON 存储可精确往返。GFVariantJsonCodec.variant_to_json_compatible()会把超出 JSON 安全范围的 64 位整数编码为Int64类型标记;PackedInt64Array的元素也会以文本形式保存在类型标记中。GFSettingsUtility持久化设置值时复用GFVariantJsonCodec处理非设置专用类型,设置中的超大整数现在会以类型标记保存。
🐛 Bug 修复
- 修复
GFStorageCodec在 Godot 4.6 下对非字符串 JSON 字典键排序时使用String(int)导致解析失败的问题。 - 修复 JSON checksum 在载荷包含 64 位整数或
StringName键时,写入后读回可能被误判为完整性损坏的问题。 - 修复
GFSeedUtility完整随机状态通过默认 JSON 存储后,主种子、RNG 状态或分支计数可能因 64 位整数精度丢失而破坏确定性回放的问题。 - 修复
GFStorageSyncUtility使用非数字 metadata 比较冲突新旧时,任意 Variant 字符串化可能触发 GodotString(Variant)转换错误的问题。 - 修复
GFSettingDefinition将数字等非字符串值钳制为STRING/STRING_NAME时可能触发String(Variant)转换错误的问题。 - 修复
GFSaveGraphUtility校验或应用手写载荷时,非字符串 source/scope key 可能触发String(Variant)转换错误的问题。
🔌 API 变动说明
GFSeedUtility.get_full_state()的状态字典新增明确的state_schema_version字段,当前值为2;global_seed、rng_state与branch_counters的计数值由整数改为十进制字符串。GFVariantJsonCodec.variant_to_json_compatible()新增encode_unsafe_ints选项;默认true,可显式设为false以保留旧的裸数字输出。- 新增公开类
GFBackgroundWorkUtility和GFBackgroundWorkTask;后台工作提交方法返回RefCounted任务实例,实际对象为GFBackgroundWorkTask。
📘 升级指南
- 项目代码不要再把
get_full_state()的global_seed、rng_state或分支计数字段当作数字直接编辑;恢复时继续把完整字典交给set_full_state()。 - JSON 存档中需要精确保留任意 64 位整数的业务字段,应使用字符串、
GFVariantJsonCodec的类型化 JSON 值,或切换到GFStorageCodec.Format.BINARY。 - 项目若直接读取
get_full_state()字典做调试展示,可显示state_schema_version,但业务判断不要把它当作 GF 框架版本号。 - 新后台工作推荐只传路径、ID、数值、数组和字典等纯 Variant 数据;需要触碰 Node、Resource 或 UI 的逻辑应放到
apply_callback,由GFBackgroundWorkUtility.tick()在主线程执行。
📁 核心受影响文件
- 随机状态:
addons/gf/standard/utilities/random/gf_seed_utility.gd。 - 存储编码:
addons/gf/standard/utilities/storage/gf_storage_codec.gd。 - 存储同步:
addons/gf/standard/utilities/storage/gf_storage_sync_utility.gd。 - 设置持久化:
addons/gf/standard/utilities/settings/gf_settings_utility.gd、addons/gf/standard/utilities/settings/gf_setting_definition.gd。 - Variant JSON 编码:
addons/gf/standard/foundation/variant/gf_variant_json_codec.gd。 - 存档图:
addons/gf/extensions/save/graph/gf_save_graph_utility.gd。 - 后台工作协调:
addons/gf/standard/utilities/jobs/gf_background_work_utility.gd、addons/gf/standard/utilities/jobs/gf_background_work_task.gd。 - 测试:
tests/gf_core/standard/utilities/jobs/test_gf_background_work_utility.gd。 - 文档:
docs/zh/standard/utilities/io/assets-jobs-warmup.md、docs/zh/standard/utilities/io/index.md。