Un RayCast proiectează o linie geometrică de la un punct de origine la o destinație și verifică dacă intersectează un corp fizic (CollisionShape2D). Este utilizat pentru arme cu gloanțe instantanee (hitscan), verificarea vederii inamicilor (Line of Sight) și detecția marginilor de platformă.
Verificarea vederii inamicului cu nodul RayCast2D
extends CharacterBody2D
@onready var raza_vedere: RayCast2D = $RayCast2D
@export var tinta: Node2D
func _physics_process(delta: float) -> void:
if tinta:
# Orientăm raza direct spre poziția țintei:
raza_vedere.target_position = to_local(tinta.global_position)
# Forțăm actualizarea razei în caz de nevoie:
raza_vedere.force_raycast_update()
if raza_vedere.is_colliding():
var obiect_lovit = raza_vedere.get_collider()
if obiect_lovit == tinta:
print("Jucătorul este vizibil direct (fără ziduri între noi)!")
else:
print("Linia de vedere este blocată de:", obiect_lovit.name)
Interogare directă cu raycast fără a crea nod în scenă (PhysicsDirectSpaceState2D)
func verifica_punct_la_punct(de_la: Vector2, spre: Vector2) -> Dictionary:
# Obținem starea spațiului fizic direct din lumea 2D a nodului:
var spatiu_fizic: PhysicsDirectSpaceState2D = get_world_2d().direct_space_state
# Construim parametrii interogării:
var interogare = PhysicsRayQueryParameters2D.create(de_la, spre)
interogare.exclude = [self] # excludem propriul corp
var rezultat: Dictionary = spatiu_fizic.intersect_ray(interogare)
if not rezultat.is_empty():
print("Punct exact impact:", rezultat.position)
print("Normala suprafeței lovite:", rezultat.normal)
print("Corpul lovit:", rezultat.collider)
return rezultat
Întrebări & Exemple de Cod:
Detecția cu Raze în Godot 4: Nodul RayCast2D și PhysicsDirectSpaceState2DAi o nelămurire despre utilizarea comenzii
Detecția cu Raze în Godot 4: Nodul RayCast2D și PhysicsDirectSpaceState2Dsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.