jueves, 30 de julio de 2026

GDScript para cambiar de escena por tiempo por clic de mouse y por TouchScreenButton; Godot 4.7;

 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;