extends CharacterBody3D @export var move_speed: float = 6.0 @export var mouse_sensitivity: float = 0.002 @export var jump_velocity: float = 4.5 @onready var camera_pivot: Node3D = $CameraPivot var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity") func _ready(): Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) func _unhandled_input(event): if event is InputEventMouseMotion: # Horizontal look rotate_y(-event.relative.x * mouse_sensitivity) # Vertical look camera_pivot.rotate_x(-event.relative.y * mouse_sensitivity) camera_pivot.rotation.x = clamp( camera_pivot.rotation.x, deg_to_rad(-80), deg_to_rad(80) ) func _physics_process(delta): # Gravity if not is_on_floor(): velocity.y -= gravity * delta # Jump if Input.is_action_just_pressed("jump") and is_on_floor(): velocity.y = jump_velocity # Movement input var input_dir = Vector2( Input.get_action_strength("move_right") - Input.get_action_strength("move_left"), Input.get_action_strength("move_backward") - Input.get_action_strength("move_forward") ) var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() if direction: velocity.x = direction.x * move_speed velocity.z = direction.z * move_speed else: velocity.x = move_toward(velocity.x, 0, move_speed) velocity.z = move_toward(velocity.z, 0, move_speed) move_and_slide()