#events #bevy #bevy-plugin #gamedev

bevy_extern_events

为Bevy系统中的EventReader发送通用外部事件的Bevy插件

8个版本

0.3.0 2023年11月27日
0.2.3 2023年11月24日
0.1.2 2023年11月24日

#2135 in 游戏开发

Download history 3/week @ 2024-03-09 1/week @ 2024-03-16 77/week @ 2024-03-30 9/week @ 2024-04-06

62 每月下载量

MIT 许可证

9KB
62

bevy_extern_events

crates.io docs

为什么使用它?

因为在某些时候,您可能需要与Bevy之外(外部SDK、本地平台代码、非Bevy包)的代码交互。借助这个包,您可以从任何地方排队事件,并且它们将通过典型的 EventReader 机制在您的Bevy系统中可用。

注意 这将带来一个全局静态的 RwLock-based 队列的成本,我们每帧(PreUpdate)轮询它以将其转发到 EventWriter。事件被 Box 化,因为我在没有使用 Any 的情况下找不到其他方法来拥有全局静态泛型数据类型。

因此,我建议您将其用于非每帧交互,否则请使用自定义解决方案。

示例

#[derive(Default)]
pub struct MyEvent;

#[derive(Resource, Reflect, Default)]
pub struct MyEventResource(i32);

pub fn event_system(
    mut res: ResMut<MyEventResource>,
    mut native_events: EventReader<ExternEvent<MyEvent>>,
) {
    for _e in native_events.read() {
        res.0 += 1;
    }
}

fn test() {
    let mut app = App::new();
    app.init_resource::<MyEventResource>()
        .add_plugins(ExternEventsPlugin::<MyEvent>::default())
        .add_systems(Update, event_system);

    queue_event(MyEvent::default());

    app.update();

    assert_eq!(app.world.resource::<MyEventResource>().0, 1);
}

待办事项

  • CI
  • clippy

依赖项

~19–29MB
~423K SLoC