extends CharacterBody3D @export var move_speed := 7.0 @export var acceleration := 18.0 @export var rotation_speed := 12.0 @export var camera_rig: Node3D func _physics_process(delta: float) -> void: var input := Input.get_vector( "move_left", "move_right", "move_forward", "move_backward" ) var forward := -camera_rig.global_transform.basis.z var right := camera_rig.global_transform.basis.x forward.y = 0 right.y = 0 forward = forward.normalized() right = right.normalized() var direction := (right * input.x + forward * -input.y).normalized() var target_velocity := direction * move_speed velocity.x = move_toward(velocity.x, target_velocity.x, acceleration * delta) velocity.z = move_toward(velocity.z, target_velocity.z, acceleration * delta) if not is_on_floor(): velocity.y -= 30.0 * delta else: velocity.y = 0.0 move_and_slide() if direction.length() > 0.01: var target_angle := atan2(direction.x, direction.z) rotation.y = lerp_angle(rotation.y, target_angle, rotation_speed * delta)