如何在Bevy中设置多个Default Plugins?报错求助
解决Bevy中重复添加默认插件组导致的Panic错误
问题原因
你遇到的plugin was already added panic,是因为连续两次调用.add_plugins(DefaultPlugins.set(...))。每次调用这个方法都会把整个DefaultPlugins插件组(包含LogPlugin、WindowPlugin等所有核心插件)完整添加到应用里,导致同一插件被重复注册,触发Bevy的重复插件检查机制。
解决方案
只需要一次调用.add_plugins(),在同一个DefaultPlugins实例上链式调用.set()方法,同时替换WindowPlugin和ImagePlugin即可:
修改插件添加部分的代码:
// 替换原来的两次.add_plugins调用 .add_plugins(DefaultPlugins .set(window_plugin) .set(img_plugin) )
修改后的完整main函数代码
fn main() { println!("Hello, world!"); let window_plugin = WindowPlugin { primary_window: Some(Window { title: "BevyMark".into(), resolution: (800., 600.).into(), present_mode: PresentMode::AutoNoVsync, ..default() }), ..default() }; let img_plugin = ImagePlugin::default_nearest(); App::new() .insert_resource(ClearColor(BACKGROUND_COLOR)) // 修复后的插件添加逻辑 .add_plugins(DefaultPlugins .set(window_plugin) .set(img_plugin) ) .add_plugin(FpsCounterPlugin) .add_plugin(Exp1Plugin) .add_startup_system(setup) .run(); }
补充说明
Bevy的DefaultPlugins是预定义的插件集合,涵盖了窗口、渲染、日志等核心功能。.set()方法的作用是替换插件组内的指定插件,通过链式调用可以一次性完成多个插件的替换,最后只需要添加一次修改后的插件组,就能避免重复注册问题。
内容的提问来源于stack exchange,提问作者user6600549
相关产品推荐
相关产品推荐

