Expand description

This crate contains

  • general purpose machinery for displaying Reflect values in egui_reflect_inspector,
  • a way of associating arbitrary options with fields and enum variants in inspector_options
  • utility functions for displaying bevy resource, entities and assets in bevy_inspector
  • some drop-in plugins in quick to get you started without any code necessary.

Use case 1: Quick plugins

These plugins can be easily added to your app, but don’t allow for customization of the presentation and content.

WorldInspectorPlugin

Displays the world’s entities, resources and assets.

image of the world inspector

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

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

ResourceInspectorPlugin

Display a single resource in a window.

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_plugin(ResourceInspectorPlugin::<Configuration>::default())
        // also works with built-in resources, as long as they are `Reflect
        .add_plugin(ResourceInspectorPlugin::<Time>::default())
        .run();
}

StateInspectorPlugin

Display the app state in a window, changing states on edit.

image of the state inspector

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

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugin(StateInspectorPlugin::<AppState>::default())
        .add_state(AppState::A)
        .register_type::<AppState>()
        .run();
}

#[derive(Debug, Clone, Eq, PartialEq, Hash, Reflect)]
enum AppState {
    A,
    B,
    C,
}

Use case 2: Manual UI

The quick plugins don’t allow customization of the egui window or its content, but you can easily build your own 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_plugin(EguiPlugin)
        .add_plugin(bevy_inspector_egui::DefaultInspectorConfigPlugin) // adds default options and `InspectorEguiImpl`s
        .add_system(inspector_ui)
        .run();
}

fn inspector_ui(world: &mut World) {
    let egui_context = world.resource_mut::<bevy_egui::EguiContext>().ctx_mut().clone();

    egui::Window::new("UI").show(&egui_context, |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);
        });
    });
}

Pair this with a crate like egui_dock and you have your own editor in less than 100 lines: examples/egui_dock.rs. image of the egui_dock example

FAQ

Q: How do I change the names of the entities in the world inspector?

A: You can insert the Name component.

Q: What if I just want to display a single value without passing in the whole &mut World?

A: You can use ui_for_value. Note that displaying things like Handle<StandardMaterial> won’t be able to display the asset’s value.

Re-exports

pub use bevy_egui;
pub use egui;
pub use inspector_options::InspectorOptions;

Modules

Methods for displaying bevy resources, assets and entities
General-purpose machinery for displaying Reflect types using egui
UI implementations for leaf types
Way of associating options to fields using InspectorOptions
Reexports of commonly used types
Easy plugins for showing UI panels.
A view into the world which may only access certain resources and components

Structs

Map of Targets to arbitrary TypeData used to control how the value is displayed, e.g. NumberOptions.

Derive Macros

Derive macro used to derive InspectorOptions