13 releases (breaking)
0.10.0 | Oct 14, 2024 |
---|---|
0.8.1 | Mar 6, 2024 |
0.7.0 | Dec 27, 2023 |
0.6.0 | Nov 10, 2023 |
0.2.0 | Nov 13, 2022 |
#2455 in Game dev
1,566 downloads per month
Used in 9 crates
(2 directly)
30KB
671 lines
bevy_editor_pls
⚠️ This is very much work in progress: Take a look at the missing features to see if your use case isn't yet supported.
Adds debug tools to your bevy game, including
- hierarchy view and component inspector
- separate editor camera
- some builtin editor panels for diagnostics, debug settings
- scene export
This is not, and isn't meant to be, comparable to the actual editor bevy will end up with. bevy_editor_pls
attempts to get the low hanging fruits by adding editor UI to the game executable, without having all the complexity that comes with having a proper well-designed editor architecture.
How to use:
Add the EditorPlugin
:
+use bevy_editor_pls::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
+ .add_plugins(EditorPlugin::default())
...
.run();
}
Custom editor panels
use bevy_editor_pls::{egui, prelude::*};
use bevy_editor_pls_core::editor_window::{EditorWindow, EditorWindowContext};
fn main() {
App::new()
...
.add_editor_window::<MyEditorWindow>()
...
.run();
}
pub struct MyEditorWindow;
struct MyEditorWindowState {
}
impl EditorWindow for MyEditorWindow {
type State = MyEditorWindowState;
const NAME: &'static str = "Another editor panel";
fn ui(world: &mut World, cx: EditorWindowContext, ui: &mut egui::Ui) {
let currently_inspected = &cx.state::<MyEditorWindow>().unwrap().selected;
ui.label("Anything can go here");
}
}
Controls
The default controls are:
E
to toggle the editorCtrl+Enter
to pause/unpause timeF
to focus selected entityT/R/S
to show translate/rotate/scale gizmo- Double click on the menu bar to go fullscreen
Cameras:
2d (Pan/Zoom)
: any mouse button to pan, scroll to zoom3d (Free)
:WASD + Ctrl/Shift
+Shift
for a speed boost for the free 3d camera3d (Pan/Orbit)
:Right click
to rotate around focus,Middle mouse button
to pan
Changing the default controls
use bevy_editor_pls::EditorPlugin;
use bevy_editor_pls::controls;
use bevy_editor_pls_default_windows::hierarchy::picking::EditorRayCastSource;
fn main() {
App::new()
// ..
.add_plugin(EditorPlugin)
.insert_resource(editor_controls())
.add_startup_system(set_cam3d_controls)
// ..
.run();
}
fn editor_controls() -> EditorControls {
let mut editor_controls = EditorControls::default_bindings();
editor_controls.unbind(controls::Action::PlayPauseEditor);
editor_controls.insert(
controls::Action::PlayPauseEditor,
controls::Binding {
input: controls::UserInput::Single(controls::Button::Keyboard(KeyCode::Escape)),
conditions: vec![controls::BindingCondition::ListeningForText(false)],
},
);
editor_controls
}
fn set_cam3d_controls(
mut query: Query<&mut bevy_editor_pls::default_windows::cameras::camera_3d_free::FlycamControls>,
) {
let mut controls = query.single_mut();
controls.key_up = KeyCode::Q;
controls.key_down = KeyCode::E;
}
Missing features
- scene import
- visualization of invisible entities in editor (to see where the camera is for example)
Bevy support table
bevy | bevy_editor_pls |
---|---|
0.14 | 0.9 |
0.13 | 0.8 |
0.12 | 0.7 |
0.12 | 0.6 |
0.11 | 0.5 |
0.10 | 0.4 |
0.10 | 0.3 |
0.9 | 0.2 |
0.8 | 0.1 |
Dependencies
~46–82MB
~1.5M SLoC