Nou Generator de prompt AI — scrie prompturi mai bune pentru ChatGPT, Claude și Gemini →

Detecția cu Raze în Godot 4: Nodul RayCast2D și PhysicsDirectSpaceState2D în GDScript (Godot Engine)

Ghid complet pentru detecția liniară prin raze în Godot 4: utilizarea nodului RayCast2D pentru linii de vedere (LOS), get_collider, get_collision_point și interogări fizice directe din spațiu.

Sintaxă
if $RayCast2D.is_colliding(): var col = $RayCast2D.get_collider()

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
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Detecția cu Raze în Godot 4: Nodul RayCast2D și PhysicsDirectSpaceState2D

Ai o nelămurire despre utilizarea comenzii Detecția cu Raze în Godot 4: Nodul RayCast2D și PhysicsDirectSpaceState2D sau 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.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.