Bevy系统无法访问ResMut<Events<Score>>参数,启动崩溃求助
问题分析与解决
错误原因
你遗漏了自定义事件的注册步骤。在Bevy中,任何自定义Event类型都需要通过App::add_event方法注册到应用中,这样Bevy才会创建对应的Events<Score>资源供EventWriter/EventReader访问。你的代码中没有注册Score事件,导致系统尝试获取ResMut<Events<Score>>时找不到该资源,触发panic。
修正后的代码
Cargo.toml(无需修改)
[package] name = "bevy_playground" version = "0.1.0" edition = "2021" [dependencies] bevy = "0.15.3"
src/main.rs
use bevy::prelude::*; fn main() { let mut app = App::new() .add_plugins(DefaultPlugins) .add_event::<Score>() // 新增:注册自定义事件 .add_systems(Update, dummy) .run(); } #[derive(Event)] struct Score; fn dummy(mut events: EventWriter<Score>) { // 这里可以正常发送事件,比如: // events.send(Score); }
关键细节说明
add_event::<T>()会自动向App中添加Events<T>资源,这是EventWriter<T>和EventReader<T>能够正常工作的前提- 所有自定义
Event类型都必须完成这一步注册,无论你是只写事件还是读事件
内容的提问来源于stack exchange,提问作者Galedon
相关产品推荐
相关产品推荐

