MCPcopy Index your code
hub / github.com/bonsairobo/smooth-bevy-cameras

github.com/bonsairobo/smooth-bevy-cameras @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
68 symbols 108 edges 11 files 5 documented · 7% updated 5mo ago★ 3176 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

smooth-bevy-cameras

crates.io docs.rs

A collection of exponentially-smoothed camera controllers for the Bevy Engine.

Look Transform

All controllers are based on a [LookTransform] component, which is just an eye point that looks at a target point. By modifying this component, the scene graph Transform will automatically be synchronized.

Any entities with all of Transform, LookTransform, and [Smoother] components will automatically have their Transform smoothed. Smoothing will have no effect on the LookTransform, only the final Transform in the scene graph.

use bevy::prelude::*;
use smooth_bevy_cameras::{LookTransform, LookTransformBundle, LookTransformPlugin, Smoother};

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        // Enables the system that synchronizes your `Transform`s and `LookTransform`s.
        .add_plugins(LookTransformPlugin)
        .add_startup_system(setup)
        .add_system(move_camera_system);
}

fn setup(mut commands: Commands) {
    let eye = Vec3::default();
    let target = Vec3::default();

    commands
        .spawn(LookTransformBundle {
            transform: LookTransform::new(eye, target),
            smoother: Smoother::new(0.9), // Value between 0.0 and 1.0, higher is smoother.
        })
        .insert_bundle(Camera3dBundle::default());

}

fn move_camera_system(mut cameras: Query<&mut LookTransform>) {
    // Later, another system will update the `Transform` and apply smoothing automatically.
    for mut c in cameras.iter_mut() { c.target += Vec3::new(1.0, 1.0, 1.0); }
}

Look Angles

When implementing a camera controller, it's often useful to work directly with the angles (pitch and yaw) of your look direction. You can do this with the [LookAngles] type:

use bevy::prelude::*;
use smooth_bevy_cameras::{
    LookAngles,
    LookTransform
};

fn look_angles(mut transform: LookTransform, delta: Vec2) {
    let mut angles = LookAngles::from_vector(transform.look_direction().unwrap());
    angles.add_pitch(delta.y);
    angles.add_yaw(delta.x);
    // Third-person.
    transform.eye = transform.target + 1.0 * transform.radius() * angles.unit_vector();
    // First-person.
    // transform.target = transform.eye + 1.0 * transform.radius() * angles.unit_vector();
}

This is how the built-in controllers implement rotation controls.

Built-In Controllers

These plugins depend on the [LookTransformPlugin]:

Best use: hold Right mouse button to orbit the view while using WASD to navigate in the scene, using scroll wheel to accelerate/decelerate. - Left mouse drag: Locomotion - Right mouse drag: Rotate camera - Left and Right or Middle mouse drag: Pan camera - While holding any mouse button, use A/D for panning left/right, Q/E for panning up/down - While holding any mouse button, use W/S for locomotion forward/backward - While holding any mouse button, use scroll wheel to increase/decrease locomotion and panning speeds - While holding no mouse button, use scroll wheel for locomotion forward/backward

License: MIT

Core symbols most depended-on inside this repo

yaw_and_pitch_from_vector
called by 8
src/look_angles.rs
add_yaw
called by 4
src/look_angles.rs
radius
called by 3
src/look_transform.rs
look_direction
called by 3
src/look_transform.rs
unit_vector
called by 3
src/look_angles.rs
get_yaw
called by 3
src/look_angles.rs
add_pitch
called by 3
src/look_angles.rs
assert_not_looking_up
called by 3
src/look_angles.rs

Shape

Method 29
Function 22
Class 14
Enum 3

Languages

Rust100%

Modules by API surface

src/look_angles.rs17 symbols
src/look_transform.rs16 symbols
src/controllers/unreal.rs9 symbols
src/controllers/orbit.rs9 symbols
src/controllers/fps.rs9 symbols
examples/simple_unreal.rs2 symbols
examples/simple_orbit.rs2 symbols
examples/simple_look_transform.rs2 symbols
examples/simple_fps.rs2 symbols

For agents

$ claude mcp add smooth-bevy-cameras \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact