Mostrando entradas con la etiqueta GDScript instanciando por entrar en una area3d. Mostrar todas las entradas
Mostrando entradas con la etiqueta GDScript instanciando por entrar en una area3d. Mostrar todas las entradas

domingo, 14 de diciembre de 2025

GDScript instanciando por entrar en una area3d , con retraso de 6 segundos;

 extends Area3D


# Carga la escena de la bola para poder instanciarla.

var bola_proyectada_scene = preload("res://EL DEL CUADRO QUE GRITA/character_body_3d_enemigo_cubo7-12-25.tscn")


# 0: Esperando colisión inicial

# 1: Colisión detectada, contando tiempo

# 2: Instanciación completada

var estado_instanciacion: int = 0


# Contador de tiempo, para acumular los segundos.

var tiempo_acumulado: float = 0.0


# Constante que define el retardo deseado: ¡AHORA 6 SEGUNDOS!

const TIEMPO_ESPERA: float = 6.0



# Esta función se llama automáticamente cuando otro Area3D entra en este Area3D.

# (Debes haber conectado la señal 'area_entered').

func _on_area_entered(area: Area3D) -> void:

# 1. Comprobar que el retardo no se haya iniciado ya.

if estado_instanciacion == 0:

print("Área tocada. Iniciando cuenta atrás de ", TIEMPO_ESPERA, " segundos para instanciar bola...")

estado_instanciacion = 1 # Cambiamos el estado para empezar a contar.

# 2. OPCIONAL: Comprobar si el Area que ha entrado es un área específica.

# if area.name != "Area_del_jugador":

# return



# Esta función se llama en cada frame del juego.

func _process(delta: float) -> void:

# Comprobar si estamos en el estado de conteo (1).

if estado_instanciacion == 1:

# Acumular el tiempo transcurrido desde el último frame.

tiempo_acumulado += delta

# Comprobar si se ha alcanzado el tiempo de espera (6.0 segundos).

if tiempo_acumulado >= TIEMPO_ESPERA:

# ¡Tiempo cumplido! Instanciar y cambiar el estado.

instanciar_bola()

estado_instanciacion = 2 # Marcamos como completado.

# Detenemos el _process, ya que la tarea ha terminado.

set_process(false)



func instanciar_bola() -> void:

print("¡6 segundos cumplidos! Instanciando bola proyectada.")

# Instancia la escena pre-cargada.

var nueva_bola = bola_proyectada_scene.instantiate()

# Asigna la posición de la nueva instancia a la del nodo actual.

nueva_bola.global_position = self.global_position


# Añade la instancia como hijo del nodo padre.

get_parent().add_child(nueva_bola)

# --- FIN DEL SCRIPT ---