Fix character controller jitter (#43)

* fix jitter while moving character controller

* added transform interpolation to character controller
This commit is contained in:
PROMETHIA-27
2025-06-19 03:27:59 -04:00
committed by GitHub
parent a2ea917c1e
commit e1abb02cb8
2 changed files with 28 additions and 24 deletions

View File

@@ -48,8 +48,10 @@ pub fn plugin(app: &mut App) {
app.init_resource::<CameraState>();
app.add_systems(OnEnter(GameState::Playing), startup);
app.add_systems(
PreUpdate,
(update, update_ui, update_look_around, rotate_view).run_if(in_state(GameState::Playing)),
RunFixedMainLoop,
(update, update_ui, update_look_around, rotate_view)
.after(RunFixedMainLoopSystem::AfterFixedMainLoop)
.run_if(in_state(GameState::Playing)),
);
}

View File

@@ -125,6 +125,30 @@ pub struct CharacterControllerBundle {
movement_factor: MovementSpeedFactor,
collision_events: CollisionEventsEnabled,
movement_config: MovementConfig,
interpolation: TransformInterpolation,
}
impl CharacterControllerBundle {
pub fn new(collider: Collider, controls: HeadControls) -> Self {
// Create shape caster as a slightly smaller version of collider
let mut caster_shape = collider.clone();
caster_shape.set_scale(Vector::ONE * 0.98, 10);
let config = match controls {
HeadControls::Plane => FLYING_MOVEMENT_CONFIG,
HeadControls::Walk => RUNNING_MOVEMENT_CONFIG,
};
Self {
character_controller: Character { up: Dir3::Y },
collider,
move_input: MoveInput::default(),
movement_factor: MovementSpeedFactor(1.0),
collision_events: CollisionEventsEnabled,
movement_config: config,
interpolation: TransformInterpolation,
}
}
}
#[derive(Bundle)]
@@ -183,25 +207,3 @@ const FLYING_MOVEMENT_CONFIG: MovementConfig = MovementConfig {
deceleration_factor: 0.0,
},
};
impl CharacterControllerBundle {
pub fn new(collider: Collider, controls: HeadControls) -> Self {
// Create shape caster as a slightly smaller version of collider
let mut caster_shape = collider.clone();
caster_shape.set_scale(Vector::ONE * 0.98, 10);
let config = match controls {
HeadControls::Plane => FLYING_MOVEMENT_CONFIG,
HeadControls::Walk => RUNNING_MOVEMENT_CONFIG,
};
Self {
character_controller: Character { up: Dir3::Y },
collider,
move_input: MoveInput::default(),
movement_factor: MovementSpeedFactor(1.0),
collision_events: CollisionEventsEnabled,
movement_config: config,
}
}
}