¿Qué es un RayCast?
Es una “línea invisible” que puedes lanzar desde un punto hacia una dirección para detectar colisiones. Ideal para disparos, detección de obstáculos, visión de enemigos o interacción precisa.

🧠 ¿Para qué sirve?

  • Detectar si algo está en la mira (enemigo, pared, ítem).

  • Ver si un jugador puede caminar hacia una dirección.

  • Comprobar si un objeto tiene visión directa de otro (como un NPC detectando al jugador).

  • Simular disparos o golpes cuerpo a cuerpo.

🛠️ Cómo usarlo

extends Node2D

@onready var raycast = $RayCast2D

func _physics_process(delta):
raycast.force_raycast_update()

if raycast.is_colliding():
var objeto = raycast.get_collider()
print(“Colisión con:”, objeto.name)

🔍 Este ejemplo lanza un rayo en cada frame y, si colisiona con algo, imprime el nombre del objeto.

⚙️ Configuración básica

  • Añade un nodo RayCast2D como hijo de tu objeto.

  • Define su cast_to (ej: Vector2(100, 0) para 100 px a la derecha).

  • Actívalo (enabled = true).

  • Asegúrate de que esté en la capa/máscara correcta para detectar los objetos deseados.

🎮 Ejemplo visual: Disparo de un arma

Un RayCast es perfecto para armas tipo laser o sniper, ya que impactan al instante. Puedes dibujar una línea para mostrar el disparo:

func _draw():

if raycast.is_colliding():

draw_line(Vector2.ZERO, raycast.get_collision_point(), Color.red, 2)

📌 Consejos

  • Usa varios RayCast para simulación más realista (visión en arco, colisiones múltiples).

  • Recuerda que RayCast2D ignora el nodo padre por defecto (útil para no detectar a sí mismo).

  • Para detección en 3D usa RayCast3D.