#bevy-plugin #background-task #plugin #bevy #wasm-plugin #async #gamedev

bevy-wasm-tasks

将 WASM 任务简单地集成到 Bevy 应用中以进行后台处理

3 个不稳定版本

0.13.0 2024 年 2 月 27 日
0.11.1 2023 年 8 月 31 日
0.11.0 2023 年 8 月 31 日

#365游戏开发


bevy_veilid 中使用

CC0 许可

13KB
152 代码行

bevy-wasm-tasks

一个简单的 Bevy 插件,它将 futures(包括 !Send futures)在 WASM 上通过 wasm_bindgen_futures 运行集成到 Bevy 应用中。

此代码几乎完全基于出色的 bevy-tokio-tasks,只是针对 wasm_bindgen_futures 进行了适配。

crates.io docs.rs

如何使用

如何初始化此插件

要初始化插件,只需在初始化您的 Bevy 应用时安装 WASMTasksPlugin

如何创建后台任务

要从 Bevy 系统函数创建后台任务,将 WASMTasksRuntime 作为资源参数添加,并调用 spawn_background_task 函数。

fn example_system(runtime: ResMut<WASMTasksRuntime>) {
    runtime.spawn_background_task(|_ctx| async move {
        log::info!("This task is running in a WASM future");
    });
}

如何与 Bevy 同步

通常,后台任务需要在某些点与主 Bevy 应用同步。您可以通过在传递给每个后台任务的 TaskContext 上调用 run_on_main_thread 函数来实现这一点。

fn example_system(runtime: ResMut<WASMTasksRuntime>) {
    runtime.spawn_background_task(|mut ctx| async move {
        log::info!("This print executes from a background WASM future");
        ctx.run_on_main_thread(move |ctx| {
            // The inner context gives access to a mutable Bevy World reference.
            let _world: &mut World = ctx.world;
        }).await;
    });
}

版本兼容性

此包的主版本和次要版本号将与 Bevy 相匹配。为了允许此包在 Bevy 更新之间发布更新,修补版本可以独立于 Bevy 的发布周期进行递增。

bevy-tokio-tasks 版本 bevy 版本 tokio 版本
0.11.0 0.11.0 1
0.10.2 0.10.1 1
0.10.1 0.10.0 1
0.10.0 0.10.0 1
0.9.5 0.9.1 1
0.9.4 0.9.1 1
0.9.3 0.9.1 1
0.9.2 0.9.1 1
0.9.1 0.9.1 1
0.9.0 0.9.1 1

依赖项

~16MB
~265K SLoC