#system #bevy #gui #oneshot

bevy_oneshot

为Bevy提供的简单一次性系统

3个不稳定版本

0.2.0 2023年9月12日
0.1.1 2023年6月22日
0.1.0 2023年6月22日

#2088 in 游戏开发

27 每月下载量

MIT/Apache

28KB

bevy_oneshot

Crates.io Crates.io docs.rs

Bevy的一次性系统简单实现

为什么?

这个库主要是为了方便与GUI工作而制作的。记得你创建了一个带有几个输入参数的GUI系统时的那种感觉吗?一开始一切顺利,但当你界面中第一个按钮出现时,处理这个按钮需要向系统添加几个参数。第二个按钮需要一个资源,第三个需要一个查询。第四个按钮之后,你收到了一个clippy::too_many_arguments警告... 真是令人沮丧,对吧?

使用bevy_oneshot,你可以将特定按钮需要的所有参数放入一个单独的系统,或者甚至不编写系统,通过创建一个lambda函数来实现,这大大减少了系统作用域中的不必要的代码量。

我真的希望Bevy很快能引入一次性系统,这个crate将变得无关紧要。

安装

cargo add bevy_oneshot

或者将其添加到你的Cargo.toml

[dependencies]
bevy_oheshot = "0.2"

使用方法

use bevy::prelude::*;
use bevy_oneshot::CommandRunOnce;

fn some_system(mut commands: Commands) {
    // run once without arguments
    commands.run_once(|_query: Query<&Window>| {
        // your code here
    });

    // run once with input arguments
    commands.run_once_with(
        |input: In<u32>| {
            println!("{}", input.0);
        },
        42,
    );
}

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_startup_system(some_system)
        .run();
}

兼容性

Bevy版本 插件版本
0.10 0.1.0-0.1.1
0.11 0.2.0

贡献

非常欢迎PR。

依赖

约20-29MB
约425K SLoC