跳转至

异步资源加载与缓存

GFAssetUtility 统一处理 ResourceLoader 请求、并发加载合并、缓存、取消、资源句柄和资源分组。需要把一组资源预热清单保存成项目资源时,可以用 GFAssetPreloadPlan 描述路径、分组、pin 策略和加载约束,再交给 GFAssetUtility.preload_plan_async() 执行。需要把加载状态传给 UI、日志或项目自定义资源流程时,可以用 GFResourceLoadState 表达资源键、路径、状态、进度、错误、资源身份和弱/强引用模式。

阅读入口

资源状态快照

GFResourceLoadState 不发起加载请求,也不替代 GFAssetHandle。它只是一个可复制的状态对象,适合把“请求中、加载中、已加载、失败、释放、过期”这些状态交给 UI、诊断面板或项目侧资源队列:

var state := GFResourceLoadState.new()
state.configure(&"ui.inventory.icon", "res://ui/icons/inventory.png")
state.mark_requested({ "group": "ui" })
state.mark_loading(0.4)

var resource := await load_icon_async()
state.mark_loaded(resource)

var snapshot := state.to_dictionary()

to_dictionary() 会包含 resource_identity,其中记录 raw path、canonical path、uid://、scheme、extension、cache key 和存在性。需要单独读取身份时调用 get_resource_identity()GFResourceIdentity 不加载资源,也不替代注册表、resolver 或内容包 manifest,但 GFAssetUtility 缓存、GFResourceResolverUtility 解析报告、GFResourceRegistry 条目导出和场景预加载图谱都会用它的 cache_key 消除 res:// / uid:// / canonical path 混用导致的重复身份。

默认引用模式是弱引用,状态对象不会为了展示进度而延长资源生命周期。确实需要状态对象持有资源时,配置 REFERENCE_STRONG;释放或过期时调用 mark_released() / mark_stale(),不要让状态字典成为隐式缓存策略。

使用边界

GFAssetUtility 只管理 ResourceLoader 请求、回调分发和内存缓存,不负责实例化节点、引用计数之外的资源生命周期或远程下载。