15 releases
0.2.5 | Feb 25, 2024 |
---|---|
0.2.4 | Dec 23, 2023 |
0.2.3 | Oct 24, 2023 |
0.2.2 | Jul 15, 2023 |
0.1.4-dev | Nov 20, 2022 |
#140 in Game dev
280 downloads per month
1MB
467 lines
Bevy FPS Controller
Inspired from Source engine movement, this plugin implements movement suitable for FPS games.
Feel free to make issues/PRs!
Features
- Air strafing and bunny hopping (hold down jump key)
- Support for sloped ground
- Crouching (prevents falling off ledges), sprinting
- Noclip mode
- Configurable settings
Examples
See main.rs
cargo run --release --example minimal
use bevy::prelude::*;
use bevy_rapier3d::prelude::*;
use bevy_fps_controller::controller::*;
fn main() {
App::new()
...
.add_plugin(RapierPhysicsPlugin::<NoUserData>::default())
.add_plugin(FpsControllerPlugin)
.add_startup_system(setup)
...
}
fn setup(mut commands: Commands, ...) {
...
let logical_entity = commands
.spawn((
Collider::capsule(Vec3::Y * 0.5, Vec3::Y * 1.5, 0.5),
Friction {
coefficient: 0.0,
combine_rule: CoefficientCombineRule::Min,
},
Restitution {
coefficient: 0.0,
combine_rule: CoefficientCombineRule::Min,
},
ActiveEvents::COLLISION_EVENTS,
Velocity::zero(),
RigidBody::Dynamic,
Sleeping::disabled(),
LockedAxes::ROTATION_LOCKED,
AdditionalMassProperties::Mass(1.0),
GravityScale(0.0),
Ccd { enabled: true }, // Prevent clipping when going fast
TransformBundle::from_transform(Transform::from_xyz(0.0, 3.0, 0.0)),
LogicalPlayer,
FpsControllerInput {
pitch: -TAU / 12.0,
yaw: TAU * 5.0 / 8.0,
..default()
},
FpsController { ..default() }
))
.insert(CameraConfig {
height_offset: 0.0,
radius_scale: 0.75,
})
.id();
commands.spawn((
Camera3dBundle::default(),
RenderPlayer { logical_entity },
));
...
}
Demo
Used by my other project: https://github.com/qhdwight/voxel-game-rs
Dependencies
~24–56MB
~882K SLoC