ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

不想用加载状态?bevy_asset_loader无Loading State的轻量用法解析

不想用加载状态?bevy_asset_loader无Loading State的轻量用法解析 不想用加载状态bevy_asset_loader无Loading State的轻量用法解析【免费下载链接】bevy_asset_loaderBevy plugin helping with asset loading and organization项目地址: https://gitcode.com/gh_mirrors/be/bevy_asset_loaderbevy_asset_loader是一款帮助 Bevy 游戏管理资源加载与组织的开源插件它的招牌功能加载状态Loading State固然好用但并非每个项目都需要一个专门的加载画面。本文带你掌握它更轻量的一面直接用init_collection初始化AssetCollection跳过 Loading State同样能大幅减少资源管理样板代码 为什么可以不用 Loading StateLoading State 的价值在于保证进入下一状态时所有资源已加载完毕适合有加载画面、需要进度条的商业游戏。但以下场景它反而是累赘小型游戏 / 原型验证几秒就能加载完加载画面属于多余等待即时启动的工具类应用如编辑器、可视化调试器资源本就很少的项目没有等待的必要关键认知bevy_asset_loader的核心是AssetCollection把一堆Handle打包成结构体的派生宏Loading State 只是它的高级用法。去掉后者前者依然完整可用。三步启用无 Loading State 的 AssetCollection第 1 步定义资源集合结构体#[derive(AssetCollection, Resource)] struct ImageAssets { #[asset(path images/tree.png)] tree: HandleImage, #[asset(path images/female_adventurer_sheet.png)] female_adventurer: HandleImage, }第 2 步在App上初始化集合fn main() { App::new() .add_plugins(DefaultPlugins) .init_collection::ImageAssets() // 应用启动即开始加载 .run(); }第 3 步在系统中当普通资源使用fn draw(mut commands: Commands, assets: ResImageAssets) { commands.spawn(Sprite::from_image(assets.tree.clone())); }init_collection的实现在 asset_collection.rs它会立即触发资源加载并把集合插入 ECS从此ResImageAssets随时可取。两种初始化时机App 启动 vs 运行时延迟加载这是无 Loading State 玩法最有意思的部分——加载可以推迟到任意时刻方式调用位置加载时机init_collectionApp应用启动时world.init_collection任意系统/World代码执行到的那一刻官方示例 no_loading_state.rs 演示了完整流程游戏启动时只初始化ImageAssets监听鼠标点击玩家第一次按下左键时才调用world.init_collection::AudioAssets()插入音频集合随后才播放背景音乐。这种按需加载在没有加载状态时反而更灵活 ⏱️需要知道的功能限制没有 Loading State 的等待机制部分依赖等待的功能无法使用❌文件夹加载collection属性❌动态资源key属性 /.assets.ron文件❌图片采样器/数组纹理配置image属性✅单文件路径、纹理图集布局texture_atlas_layout可以正常使用因为图集布局能立即生成另外init_collection不保证资源已加载完成。在系统里使用 handle 前建议自行检查if assets.tree.is_loaded() { // 安全使用 }这也是它与 Loading State 的本质区别后者切换状态前保证全部就绪前者把检查时机交还给你。详见 README 中的 Usage without a loading state 章节。资源卸载别忘了移除集合AssetCollection持有强引用 handle会阻止 Bevy 释放内存。切换场景或不再需要某批资源时直接移除对应资源即可触发卸载world.remove_resource::ImageAssets();什么时候该回到 Loading State出现以下需求时建议启用完整的加载状态模式需要进度条配合progress_trackingfeature 与 iyes_progress使用动态资源或文件夹加载资源量大必须保证全部加载完成才进入游戏需要失败状态on_failure_continue_to处理加载异常两种方式可以共存不同插件各自用configure_loading_state追加集合互不干扰。完整特性对照可参考项目根目录的 README.md。小结bevy_asset_loader不只是加载画面插件。去掉 Loading StateAssetCollectioninit_collection依然能让你告别散落的asset_server.load(...)样板代码还能获得运行时延迟加载的灵活性——小项目直接起飞 【免费下载链接】bevy_asset_loaderBevy plugin helping with asset loading and organization项目地址: https://gitcode.com/gh_mirrors/be/bevy_asset_loader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表