Mostrando entradas con la etiqueta Magnifico GDScript para instanciar murcielagos desde un Area3d y calibrar desde el inspector;. Mostrar todas las entradas
Mostrando entradas con la etiqueta Magnifico GDScript para instanciar murcielagos desde un Area3d y calibrar desde el inspector;. Mostrar todas las entradas

martes, 28 de abril de 2026

Magnifico GDScript para instanciar murcielagos desde un Area3d y calibrar desde el inspector;









 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.