You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 20:13:34