extends Area3D
# --- CONFIGURACIÓN DESDE EL INSPECTOR ---
@export_group("Recursos")
## Arrastra aquí tu archivo .tscn (el murciélago o cualquier otro)
@export var escena_a_instanciar : PackedScene
@export_group("Tiempos de Spawner")
## Cada cuántos segundos aparece uno nuevo
@export var tiempo_entre_instancias : float = 2.0
@export_group("Movimiento Aleatorio")
## Velocidad mínima y máxima en cada eje (X, Y, Z)
@export var velocidad_x : Vector2 = Vector2(-2.0, 2.0)
@export var velocidad_y : Vector2 = Vector2(-0.5, 1.5)
@export var velocidad_z : Vector2 = Vector2(-2.0, 2.0)
@export_group("Limpieza y Optimización")
## Segundos que vivirá el objeto antes de borrarse (0 = infinito)
@export var tiempo_de_vida : float = 10.0
## Distancia máxima desde el spawner antes de borrarse (0 = sin límite)
@export var distancia_maxima : float = 50.0
var timer : float = 0.0
func _process(delta):
timer += delta
if timer >= tiempo_entre_instancias:
instanciar_criatura()
timer = 0.0
func instanciar_criatura():
if escena_a_instanciar == null:
return
# 1. Creamos la instancia
var nueva_instancia = escena_a_instanciar.instantiate()
# 2. La añadimos a la escena
get_tree().current_scene.add_child(nueva_instancia)
# 3. Posición inicial
nueva_instancia.global_position = global_position
# 4. Calculamos su velocidad aleatoria
var vel_random = Vector3(
randf_range(velocidad_x.x, velocidad_x.y),
randf_range(velocidad_y.x, velocidad_y.y),
randf_range(velocidad_z.x, velocidad_z.y)
)
# 5. Inyectamos la lógica de movimiento y auto-destrucción
var mover_script = GDScript.new()
mover_script.set_source_code("""
extends Node3D
var velocidad = Vector3.ZERO
var pos_inicio = Vector3.ZERO
var max_dist = 0.0
var vida_timer = 0.0
var max_vida = 0.0
func _process(delta):
# Movimiento
global_translate(velocidad * delta)
# Control por Tiempo
if max_vida > 0:
vida_timer += delta
if vida_timer >= max_vida:
queue_free()
# Control por Distancia
if max_dist > 0:
if global_position.distance_to(pos_inicio) >= max_dist:
queue_free()
""")
mover_script.reload()
nueva_instancia.set_script(mover_script)
# Pasamos las variables del Inspector a la instancia recién creada
nueva_instancia.velocidad = vel_random
nueva_instancia.pos_inicio = global_position
nueva_instancia.max_dist = distancia_maxima
nueva_instancia.max_vida = tiempo_de_vida
-------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------
Explicacion: busco unos murcielagos que salen desde el interior de una calavera, se instancien , se crean con este GDScript desde un Area3d, y con el sistema de @export , se consigue desde el inspector del motor de juegos de Godot 4.6.2 alterar, la velocidad de las instancias, la velocidad de su movimiento por el escenario del juego , el tiempo de vida......magnifica utilizacion de la IA, hay quien dice que asi no se aprende a programar, pero yo no quiero programar, yo quiero desarrollar un videojuego, de todas formas algo si que se aprende, yo desconocia las maravillas del @export, ademas con este GDScript puedes arrastrar al inspector la escena tscn que quieras instanciar sin tocar nada de codigo.
Es un poderoso GDScript.
No hay comentarios:
Publicar un comentario