Speed boost doesn't work

When I press ui_shift, it should go 2 times faster. What am I doing wrong?

extends CharacterBody3D


@warning_ignore("untyped_declaration")
@onready var camera = $Camera3D
var SPEED : float = 10.0
const JUMP_VELOCITY : float = 4.5

# Questo codice dovrebbe essere facile da capire, non servono commenti.
# This code should be easy to understand, no comments needed.

# 31/01/2026: The camera is not moving, anything else works. I have no idea what is happening.
# 31/01/2026: The camera now moves, something else was consuming the events, had to change from _unhandled_input() to _input().
# 21/04/2026: Skybox no longer showing... for no reason.
# 28/04/2026: Skybox is back! A setting made it disappear, I got an Eureka effect.

func _process(_delta: float) -> void:
	if Input.is_action_just_pressed("ui_shift"):
		SPEED = 10.0
	else:
		SPEED = 5.0

func _physics_process(delta: float) -> void:
	camera.rotation.x = clampf(camera.rotation.x, CAMERA_PITCH_MIN, CAMERA_PITCH_MAX)
	
	if not is_on_floor():
		velocity += get_gravity() * delta

	if Input.is_action_just_pressed("ui_jump") and is_on_floor():
		velocity.y = JUMP_VELOCITY

	@warning_ignore("inferred_declaration")
	var input_dir := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
	@warning_ignore("inferred_declaration")
	var direction := (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
	
	if direction:
		velocity.x = direction.x * SPEED
		velocity.z = direction.z * SPEED
	else:
		velocity.x = move_toward(velocity.x, 0, SPEED)
		velocity.z = move_toward(velocity.z, 0, SPEED)

	move_and_slide()

var mouse_sensitivity : float = 0.002
var mouse_look_sensitivity : float= 0.002
var camera_pitch : float = 0.0
const CAMERA_PITCH_MIN : float = deg_to_rad(-90.0)
const CAMERA_PITCH_MAX : float = deg_to_rad(90.0)

@warning_ignore("untyped_declaration")
func _ready():
	Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
	
func _input(event: InputEvent) -> void:
	if event is InputEventMouseMotion:
		rotate_y(-event.relative.x * mouse_look_sensitivity)
		camera.rotate_x(-event.relative.y * mouse_look_sensitivity)

	if event is not InputEventMouseMotion:
		return

		@warning_ignore("unreachable_code")
		camera_pitch -= event.relative.y * mouse_sensitivity
		camera_pitch = clampf(camera_pitch, CAMERA_PITCH_MIN, CAMERA_PITCH_MAX)
		camera.rotation.x = camera_pitch

Please help

If you use Input.is_action_just_pressed(“ui_shift”) the effect only lasts one frame. Use Input.is_action_just_pressed(“ui_shift”)

The code snippet below is the reason your speed boost is not working.

You’re making use of is_action_just_pressed() which evaluates to true when the input (e.g. "ui_shift") is pressed in the current frame – it’s false otherwise. As it is currently, your SPEED is only set to 10.0 for a single frame, then subsequently reset to 5.0 in the next _process call.

You should use is_action_pressed() instead which checks the state of the input irrespective of the intial start input.

uhh what

Look at your code where you set the speed and remove “just_”.

thanks