8个版本
0.3.0 | 2023年11月27日 |
---|---|
0.2.3 | 2023年11月24日 |
0.1.2 | 2023年11月24日 |
#2135 in 游戏开发
62 每月下载量
9KB
62 行
bevy_extern_events
为什么使用它?
因为在某些时候,您可能需要与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