Expand description
Bevy Pan/Orbit Camera
§Summary
Bevy Pan/Orbit Camera provides orbit camera controls for Bevy Engine, designed with simplicity and flexibility in mind. Use it to quickly prototype, experiment, for model viewers, and more!
§Features:
- Smoothed orbiting, panning, and zooming
- Works with orthographic camera projection in addition to perspective
- Customisable controls, sensitivity, and more
- Touch support
- Works with multiple viewports and/or windows
- Easy to control manually, e.g. for keyboard control or animation
- Can control cameras that render to a texture
§Controls
Default mouse controls:
- Left Mouse - Orbit
- Right Mouse - Pan
- Scroll Wheel - Zoom
Default touch controls:
- One finger - Orbit
- Two fingers - Pan
- Pinch - Zoom
§Quick Start
Add the plugin:
ⓘ
.add_plugins(PanOrbitCameraPlugin)
Add PanOrbitCamera
(this will automatically add a Camera3d
but you can add it manually if necessary):
ⓘ
commands.spawn((
Transform::from_translation(Vec3::new(0.0, 1.5, 5.0)),
PanOrbitCamera::default(),
));
This will set up a camera with good defaults.
Check out the advanced example to see all the possible configuration options.
§Cargo Features
bevy_egui
(optional): MakesPanOrbitCamera
ignore any input thategui
uses, thus preventing moving the camera when interacting with egui windows
§Version Compatibility
bevy | bevy_panorbit_camera |
---|---|
0.15 | 0.21-0.25 |
0.14 | 0.19-0.20 |
0.13 | 0.14-0.18 |
0.12 | 0.9-0.13 |
0.11 | 0.6-0.8 |
0.10 | 0.1-0.5 |
§Credits
- Bevy Cheat Book: For providing an example that I started from
- babylon.js: I referenced their arc rotate camera for some of this
- bevy_pancam: For the egui feature idea
§License
All code in this repository is dual-licensed under either:
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
at your option. This means you can select the license you prefer! This dual-licensing approach is the de-facto standard in the Rust ecosystem and there are very good reasons to include both.
Structs§
- Active
Camera Data - Tracks which
PanOrbitCamera
is active (should handle input events), along with the window and viewport dimensions, which are used for scaling mouse motion.PanOrbitCameraPlugin
manages this resource automatically, in order to support multiple viewports/windows. However, if this doesn’t work for you, you can take over and manage it yourself, e.g. when you want to control a camera that is rendering to a texture. - PanOrbit
Camera - Tags an entity as capable of panning and orbiting, and provides a way to configure the camera’s behaviour and controls.
- PanOrbit
Camera Plugin - Bevy plugin that contains the systems for controlling
PanOrbitCamera
components. - PanOrbit
Camera System Set - Base system set to allow ordering of
PanOrbitCamera
Enums§
- Focus
Bounds Shape - The shape to restrict the camera’s focus inside.
- Touch
Controls - The control scheme to use for touch input. Given that some touch gestures don’t make sense being changed (e.g. pinch to zoom), there is just a set if different schemes rather than full customization.
- Trackpad
Behavior - Allows for changing the
TrackpadBehavior
from default to the way it works in Blender. In Blender the trackpad orbits when scrolling. If you hold down theShiftLeft
, it Pans and holding downControlLeft
will Zoom.