Mostrando entradas con la etiqueta Godot 4.6.2 GDScript muy elavorado para proyectil;. Mostrar todas las entradas
Mostrando entradas con la etiqueta Godot 4.6.2 GDScript muy elavorado para proyectil;. Mostrar todas las entradas

lunes, 6 de abril de 2026

Godot 4.6.2 GDScript muy elavorado para proyectil;

 extends Area3D


# --- AJUSTES DESDE EL INSPECTOR ---

@export_group("Movimiento")

@export var velocidad: float = 15.0

@export var gravedad: float = 9.8  # Fuerza con la que cae al chocar

@export var rebote_fuerza: float = 0.2 # Un pequeño saltito al tocar la pared


@export_group("Tiempos de Vida")

@export var tiempo_vuelo_max: float = 5.0 # Se borra si no toca nada en X segundos

@export var tiempo_en_suelo: float = 3.0 # Cuánto tiempo se queda tirada en el suelo antes de borrarse


# --- VARIABLES INTERNAS ---

var chocado: bool = false

var velocidad_caida: Vector3 = Vector3.ZERO

var tiempo_total: float = 0.0


func _ready() -> void:

if not body_entered.is_connected(_on_body_entered):

body_entered.connect(_on_body_entered)


func _process(delta: float) -> void:

tiempo_total += delta

if not chocado:

# --- ESTADO 1: VOLANDO ---

# Avanza recto hacia adelante

translate(Vector3(0, 0, velocidad * delta))

# Autodestrucción por seguridad (si se pierde en el infinito)

if tiempo_total >= tiempo_vuelo_max:

queue_free()

else:

# --- ESTADO 2: CAYENDO (FÍSICA SIMULADA) ---

# Aplicamos gravedad a la velocidad de caída

velocidad_caida.y -= gravedad * delta

position += velocidad_caida * delta

# Si lleva mucho tiempo en el suelo, la borramos para ahorrar memoria

if tiempo_total >= tiempo_en_suelo:

queue_free()


func _on_body_entered(body: Node) -> void:

if chocado: return # Si ya chocó, no procesamos más choques

print("¡Impacto con: ", body.name, "! Cayendo al suelo...")

chocado = true

tiempo_total = 0.0 # Reiniciamos el cronómetro para el tiempo en el suelo

# Calculamos un pequeño rebote aleatorio para que no caiga como un palo

velocidad_caida = Vector3(

randf_range(-1, 1), 

rebote_fuerza, 

randf_range(-1, 1)

)

# Opcional: Podrías desactivar el sonido o la luz de la bala aquí

---------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------


Explicacion: este GDScript regula desde el inspector, velocidad de los proyectiles, tiempo de vida en pantalla de ellos, gravedad ,revote.....virgerias vamos todo gracias a la IA  de mi navegador de internet.