56个版本 (24个破坏性更新)

0.25.2 2024年8月11日
0.25.1 2024年7月10日
0.24.0 2024年4月19日
0.23.4 2024年3月6日
0.3.0 2021年1月24日

#4 in 游戏开发

Download history 4973/week @ 2024-05-03 4728/week @ 2024-05-10 4803/week @ 2024-05-17 4622/week @ 2024-05-24 4652/week @ 2024-05-31 3426/week @ 2024-06-07 4464/week @ 2024-06-14 4743/week @ 2024-06-21 3058/week @ 2024-06-28 3952/week @ 2024-07-05 4453/week @ 2024-07-12 5307/week @ 2024-07-19 6142/week @ 2024-07-26 4784/week @ 2024-08-02 6716/week @ 2024-08-09 5371/week @ 2024-08-16

23,940 每月下载量
用于 102 个crate(89个直接使用)

MIT/Apache

295KB
6K SLoC

bevy-inspector-egui

示例可以在 ./crates/bevy-inspector-egui/examples 中找到。

此crate包含

变更日志可以在 docs/CHANGELOG.md 中找到。

用例1:快速插件

这些插件可以轻松添加到您的应用程序中,但无法自定义展示和内容。

WorldInspectorPlugin

显示世界的实体、资源和资产。

image of the world inspector

use bevy::prelude::*;
use bevy_inspector_egui::quick::WorldInspectorPlugin;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(WorldInspectorPlugin::new())
        .run();
}

ResourceInspectorPlugin

在窗口中显示单个资源。

image of the resource inspector

use bevy::prelude::*;
use bevy_inspector_egui::prelude::*;
use bevy_inspector_egui::quick::ResourceInspectorPlugin;

// `InspectorOptions` are completely optional
#[derive(Reflect, Resource, Default, InspectorOptions)]
#[reflect(Resource, InspectorOptions)]
struct Configuration {
    name: String,
    #[inspector(min = 0.0, max = 1.0)]
    option: f32,
}

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .init_resource::<Configuration>() // `ResourceInspectorPlugin` won't initialize the resource
        .register_type::<Configuration>() // you need to register your type to display it
        .add_plugins(ResourceInspectorPlugin::<Configuration>::default())
        // also works with built-in resources, as long as they are `Reflect`
        .add_plugins(ResourceInspectorPlugin::<Time>::default())
        .run();
}

还有 StateInspectorPluginAssetInspectorPlugin

用例2:手动UI

快速插件不允许自定义egui窗口或其内容,但您可以轻松构建自己的UI

use bevy::prelude::*;
use bevy_egui::EguiPlugin;
use bevy_inspector_egui::prelude::*;
use std::any::TypeId;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(EguiPlugin)
        .add_plugins(bevy_inspector_egui::DefaultInspectorConfigPlugin) // adds default options and `InspectorEguiImpl`s
        .add_systems(Update, inspector_ui)
        .run();
}

fn inspector_ui(world: &mut World) {
    let Ok(egui_context) = world
        .query_filtered::<&mut EguiContext, With<PrimaryWindow>>()
        .get_single(world)
    else {
        return;
    };
    let mut egui_context = egui_context.clone();

    egui::Window::new("UI").show(egui_context.get_mut(), |ui| {
        egui::ScrollArea::vertical().show(ui, |ui| {
            // equivalent to `WorldInspectorPlugin`
            bevy_inspector_egui::bevy_inspector::ui_for_world(world, ui);

            egui::CollapsingHeader::new("Materials").show(ui, |ui| {
                bevy_inspector_egui::bevy_inspector::ui_for_assets::<StandardMaterial>(world, ui);
            });

            ui.heading("Entities");
            bevy_inspector_egui::bevy_inspector::ui_for_world_entities(world, ui);
        });
    });
}

搭配像egui_dock这样的crate,你可以在不到100行代码内拥有自己的编辑器:examples/egui_dock.rsegui_dock示例的图片

Cargo功能

  • highlight_changes - 每帧突出显示更改的值。理想情况下,这应该可以运行时配置,但它作为一个临时解决方案被这样实现。如果您想运行时配置此功能,请提出一个问题,让我知道这是一个更优先的任务。
  • bevy_pbr(默认):为bevy_pbr类型注册默认选项。如果您不使用bevy_pbr,应禁用此功能以减少依赖项的足迹。

常见问题解答

Q: 我如何在世界检查器中更改实体的名称?

A: 您可以插入Name组件。

Q: 如果我只是想显示一个值而不传递整个&mut World怎么办?

A: 您可以使用reflect_inspector::ui_for_value。请注意,显示像Handle<StandardMaterial>这样的内容将无法显示资产值。

Q: 我能否更改类型的显示方式?

A: 实现InspectorPrimitive并调用app.register_type_data::<T, InspectorEguiImpl>

Bevy支持表

bevy bevy-inspector-egui
0.14 0.25
0.13 0.24
0.13 0.23
0.12 0.22
0.12 0.21
0.11 0.19-0.20
0.10 0.18
0.9 0.14-0.17
0.8 0.12-0.13
0.7 0.10-0.11
0.6 0.9
0.6 0.8
0.6 0.7
0.5 0.5-0.6
0.5 0.4
0.4 0.1-0.3

依赖关系

~39–78MB
~1.5M SLoC