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 游戏开发
23,940 每月下载量
用于 102 个crate(89个直接使用)
295KB
6K SLoC
bevy-inspector-egui
示例可以在 ./crates/bevy-inspector-egui/examples
中找到。
此crate包含
- 用于在 reflect_inspector 中显示
Reflect
值的通用机制 - 在 inspector_options 中将任意选项与字段和枚举变体关联的方法
- 显示bevy资源、实体和资产的实用函数 bevy_inspector
- 一些快速插件 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
快速插件不允许自定义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
- 每帧突出显示更改的值。理想情况下,这应该可以运行时配置,但它作为一个临时解决方案被这样实现。如果您想运行时配置此功能,请提出一个问题,让我知道这是一个更优先的任务。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