一键导入
bevy-events
Reference for events, messages, and observers in Bevy — Message/MessageReader/MessageWriter, Event/EntityEvent, triggers, observers, and propagation.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Reference for events, messages, and observers in Bevy — Message/MessageReader/MessageWriter, Event/EntityEvent, triggers, observers, and propagation.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Reference for Avian physics engine — rigid bodies, colliders, joints, spatial queries, collision events, character controllers, and debug rendering.
Reference for loading, managing, and tracking assets in Bevy — AssetServer, handles, loading states, events, custom loaders, and hot reloading.
Reference for playing and controlling audio in Bevy — AudioPlayer, AudioSink, spatial audio, volume, and playback settings.
Reference for Bevy Scene Notation (BSN) — the bsn! macro for defining inline scenes with components, children, relationships, observers, and dynamic props.
Reference for cameras in Bevy — Camera2d, Camera3d, viewports, projection, render layers, mouse-to-world, and free camera controllers.
Reference for Bevy Commands — spawning/despawning entities, inserting/removing components, custom commands, trait extensions, and testing.
| name | bevy-events |
| description | Reference for events, messages, and observers in Bevy — Message/MessageReader/MessageWriter, Event/EntityEvent, triggers, observers, and propagation. |
| metadata | {"crate":"bevy_ecs","bevy":"0.19"} |
Message — buffered queue, consumed next frame, good for frequent eventsEvent / EntityEvent — immediate observers, good for infrequent events with entity scope#[derive(Message)]
struct PlayerDetected(Entity);
app.add_message::<PlayerDetected>();
fn detect(mut messages: MessageWriter<PlayerDetected>) {
messages.write(PlayerDetected(entity));
}
fn react(mut messages: MessageReader<PlayerDetected>) {
for msg in messages.read() { }
}
Messages are double-buffered — systems see messages from the current and previous frame. Unconsumed messages are dropped after two frames.
#[derive(Event)]
struct GameStarted;
#[derive(EntityEvent)]
struct BossKilled { entity: Entity }
fn on_respawn(event: On<Add, Enemy>, query: Query<(&Enemy, &Position)>) {
let (enemy, pos) = query.get(event.entity).unwrap();
}
app.add_observer(on_respawn);
fn on_boss_killed(event: On<BossKilled>, query: Query<&Enemy>) {
let enemy = query.get(event.entity).unwrap();
}
let entity = commands.spawn(Enemy).observe(on_boss_killed).id();
commands.trigger(BossKilled { entity });
commands.trigger(SomeEvent);
commands.trigger(SomeEntityEvent { entity });
| Event | Triggers when |
|---|---|
On<Add, T> | Component T is added |
On<Insert, T> | Component T is inserted |
On<Replace, T> | Component T is replaced |
On<Remove, T> | Component T is removed |
On<Despawn, T> | Component T is despawned |
The second generic B in On<E, B> acts as OR filter: On<Add, (Enemy, Person)> triggers when either Enemy or Person is added.
#[derive(EntityEvent)]
#[entity_event(propagate, auto_propagate)]
struct LocationTravelled {
#[event_target]
ship: Entity,
}
Propagates up through ChildOf hierarchy. Stops when chain ends or observer manually stops it.
| Events | Messages | |
|---|---|---|
| Frequency | Infrequent | Frequent |
| Latency | Immediate | Up to 1 frame |
| Scope | World or Entity | World |
| Ordering | No explicit order | Ordered |
| Coupling | High | Low |
| Propagation | Bubbling | None |