31个版本 (破坏性更新)
0.25.1 | 2024年8月11日 |
---|---|
0.25.0 | 2024年7月6日 |
0.24.0 | 2024年4月19日 |
0.23.0 | 2024年2月21日 |
0.3.0 | 2021年1月24日 |
在 #detail 中排名 55
每月下载量 22,802
在 103 个库中使用(通过 bevy-inspector-egui)
16KB
185 行
bevy-inspector-egui
示例可以在 ./crates/bevy-inspector-egui/examples
中找到。
该库包含
- 用于在 reflect_inspector 中显示
Reflect
值的通用机械 - 在 inspector_options 中将任意选项与字段和枚举变体关联的方法
- 用于在 bevy_inspector 中显示 bevy 资源、实体和资产的实用函数
- 一些快速插件,在 quick 中,让您无需编写任何代码即可开始使用。
变更日志可以在 docs/CHANGELOG.md
中找到。
用例1:快速插件
这些插件可以轻松添加到您的应用程序中,但无法自定义显示和内容。
WorldInspectorPlugin
显示世界中的实体、资源和资产。
use bevy::prelude::*;
use bevy_inspector_egui::quick::WorldInspectorPlugin;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(WorldInspectorPlugin::new())
.run();
}
ResourceInspectorPlugin
在一个窗口中显示单个资源。
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();
}
还有 StateInspectorPlugin
和 AssetInspectorPlugin
。
用例2:手动UI
quick 插件不允许自定义 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.rs
。
Cargo功能
highlight_changes
- 每帧突出显示更改的值。理想情况下,这应该是可运行时配置的,但它作为临时解决方案被这样实现。如果您想在运行时配置此功能,请提交一个issue告诉我这是一个更高的优先级。bevy_pbr
(默认):为bevy_pbr
类型注册默认选项。如果您不使用bevy_pbr
,应禁用此功能以减少依赖性足迹。
常见问题解答
问:如何在世界检查器中更改实体的名称?
答:您可以插入Name
组件。
问:如果我只是想显示单个值而不传递整个&mut World
怎么办?
答:您可以使用reflect_inspector::ui_for_value
。请注意,显示如Handle<StandardMaterial>
这样的内容将无法显示资产值。
问:我能否更改类型的显示方式?
答:实现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 |
依赖项
~250–700KB
~17K SLoC