extends Node3D
## Escena a la que se cambiará tras finalizar el tiempo, clic o toque
@export var siguiente_escena: PackedScene
## Tiempo de espera en segundos antes de cambiar de escena
@export var tiempo_espera: float = 115.0
## Arrastra aquí el nodo TouchScreenButton desde el árbol de escena (opcional)
@export var boton_tactil: TouchScreenButton
var _ya_cambiando: bool = false
func _ready() -> void:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
# Conectamos el botón táctil si se ha asignado en el Inspector
if boton_tactil:
boton_tactil.pressed.connect(_al_pulsar_boton)
# Temporizador por tiempo
var timer := get_tree().create_timer(tiempo_espera)
timer.timeout.connect(_cambiar_escena_directa)
# Detecta clics de ratón o toques en la pantalla completa (móviles/PC)
func _unhandled_input(event: InputEvent) -> void:
if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
_cambiar_escena_directa()
elif event is InputEventScreenTouch and event.pressed:
_cambiar_escena_directa()
func _al_pulsar_boton() -> void:
_cambiar_escena_directa()
func _cambiar_escena_directa() -> void:
# Evitamos que se intente cambiar más de una vez
if _ya_cambiando:
return
if not siguiente_escena:
push_warning("No se ha asignado ninguna escena en el Inspector.")
return
_ya_cambiando = true
# 1. Guardamos una referencia a la escena actual
var escena_actual := get_tree().current_scene
# 2. Instanciamos la nueva escena
var nueva_instancia := siguiente_escena.instantiate()
# 3. Añadimos la nueva escena al nodo raíz del proyecto
get_tree().root.add_child(nueva_instancia)
# 4. Establecemos la nueva escena como la escena activa
get_tree().current_scene = nueva_instancia
# 5. Eliminamos la escena vieja
if escena_actual:
escena_actual.queue_free()
-----------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------Explicacion: GDScript para cambiar de escena por tiempo por clic de mouse y por TouchScreenButton;