extends Camera3D
# Parámetros ajustables desde el inspector
@export var speed: float = 5.0
@export var mouse_sensitivity: float = 0.003
var rotation_x: float = 0.0
func _ready() -> void:
# Oculta y atrapa el puntero del ratón
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
func _unhandled_input(event: InputEvent) -> void:
# 1. Salir del juego al pulsar la tecla Escape
if event.is_action_pressed("ui_cancel") or (event is InputEventKey and event.pressed and event.keycode == KEY_ESCAPE):
get_tree().quit()
# 2. Rotación de la cámara con el ratón
if event is InputEventMouseMotion and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
# Girar a los lados (Eje Y global para no inclinarnos de lado)
rotate_y(-event.relative.x * mouse_sensitivity)
# Mirar arriba y abajo (Eje X local con límite)
rotation_x -= event.relative.y * mouse_sensitivity
rotation_x = clamp(rotation_x, deg_to_rad(-89.0), deg_to_rad(89.0))
rotation.x = rotation_x
func _process(delta: float) -> void:
# 3. Detectar teclas WASD para calcular la dirección de movimiento
var input_dir := Vector3.ZERO
if Input.is_key_pressed(KEY_W):
input_dir.z -= 1 # Adelante
if Input.is_key_pressed(KEY_S):
input_dir.z += 1 # Atrás
if Input.is_key_pressed(KEY_A):
input_dir.x -= 1 # Izquierda
if Input.is_key_pressed(KEY_D):
input_dir.x += 1 # Derecha
# Normalizar para que la velocidad no se duplique al moverte en diagonal
if input_dir != Vector3.ZERO:
input_dir = input_dir.normalized()
# 4. Mover la cámara según la dirección hacia la que está mirando
var direction := (transform.basis * input_dir).normalized()
global_position += direction * speed * delta
----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
Explicacion: estupendo GDScript para manejar una camara3d en Godot 4.7, puedes explorar todo el entorno de un juego 3d con mucha facilidad: