用途:在 Bevy 0.19 中实现自定义资产加载器,用于加载专有游戏数据、旁路配置等自定义二进制或文本格式;也用于让一个资产依赖其它资产(例如关卡加载器引用贴图),以及把旧的 LoadContext::loader() 或 NestedLoader 迁移到 load_builder()。
主要能力:定义实现 AssetLoader 的加载器与对应资产类型;在 load 异步函数中通过 reader 读取文件、解析数据,并用 load_context.load_builder().load(..) 加载被引用的其它资产,使其成为依赖。可用 reader.seekable() 判断是否支持随机访问,不支持时退回流式读取。
关键要求:加载器结构体本身需 #[derive(TypePath)],资产类型需 #[derive(Asset)] 并配合 TypePath,否则报“TypePath is not implemented”。依赖必须经 LoadContext 加载,在加载器内用 asset_server.load(...) 不会登记为依赖;应使用 load_context.load_builder().load(...),以便正确触发 AssetEvent::LoadedWithDependencies。0.19 已移除 LoadContext::asset_bytes(),改为在 load 中 read_to_end 到 Vec,或用 seekable 随机访问;LoadContext::loader() 也被 load_builder 取代。扩展名按完整后缀匹配,如 level.ron 不匹配 foo.ron。加载器虽为异步,但不能用 tokio::spawn,应使用 bevy::tasks 下的工具。自定义 Reader 需实现 seekable()。
适用场景与限制:适合 Bevy 0.19 项目的自定义格式加载与资产依赖管理;旧版本 API 差异较大,需按迁移指南调整。