## Free-fly camera: WASD + QE up/down, RMB hold to look, Shift to speed up extends Camera3D @export var speed : float = 200.0 @export var fast_mult : float = 5.0 @export var sensitivity: float = 0.003 var _captured := false func _ready() -> void: current = true func _unhandled_input(event: InputEvent) -> void: if event is InputEventMouseButton: if event.button_index == MOUSE_BUTTON_RIGHT: _captured = event.pressed Input.mouse_mode = Input.MOUSE_MODE_CAPTURED if _captured else Input.MOUSE_MODE_VISIBLE if _captured and event is InputEventMouseMotion: rotate_y(-event.relative.x * sensitivity) rotate_object_local(Vector3.RIGHT, -event.relative.y * sensitivity) func _process(delta: float) -> void: if not _captured: return var move := Vector3.ZERO if Input.is_key_pressed(KEY_W): move -= basis.z if Input.is_key_pressed(KEY_S): move += basis.z if Input.is_key_pressed(KEY_A): move -= basis.x if Input.is_key_pressed(KEY_D): move += basis.x if Input.is_key_pressed(KEY_E): move += Vector3.UP if Input.is_key_pressed(KEY_Q): move -= Vector3.UP var s := speed * (fast_mult if Input.is_key_pressed(KEY_SHIFT) else 1.0) position += move.normalized() * s * delta