Detecția Razelor (Raycasting) în Workspace: workspace:Raycast și RaycastParams în Luau (Roblox Studio)

Ghid complet pentru Raycasting în Roblox Studio: trasarea de raze liniare pentru arme, lasere și detecția liniei de vizibilitate folosind RaycastParams și filtre de instanțe.

Sintaxă
local rezultat = workspace:Raycast(origine, directie, params)

Raycasting-ul este tehnica prin care o linie dreaptă matematică (o rază) este proiectată dintr-un punct de pornire pe o anumită direcție și distanță pentru a detecta dacă și unde lovește o suprafață fizică. Este utilizat pentru arme de tip hitscan, sisteme de vedere ale inamicilor (Line of Sight) și lipirea la sol a picioarelor personajelor (Inverse Kinematics).

Implementarea unui foc de armă hitscan cu Raycasting
local function trageRazaArma(origineRaza: Vector3, directieTinta: Vector3, personajTragator: Model)
    -- 1. Configurarea parametrilor de filtrare a razei:
    local params = RaycastParams.new()
    params.FilterType = RaycastFilterType.Exclude -- Ignoră obiectele specificate
    params.FilterDescendantsInstances = { personajTragator } -- Ignorăm propriul corp pentru a nu ne împușca singuri
    params.IgnoreWater = true

    -- 2. Lansarea razei în lumea fizică (pe o distanță maximă de 300 de unități):
    local directieNormalizata = directieTinta.Unit * 300
    local rezultatRaycast = workspace:Raycast(origineRaza, directieNormalizata, params)

    -- 3. Analizarea rezultatului loviturii:
    if rezultatRaycast then
        local piesaLovita = rezultatRaycast.Instance
        local punctImpact = rezultatRaycast.Position
        local normalaSuprafata = rezultatRaycast.Normal

        print(`Raza a lovit piesa '{piesaLovita.Name}' la coordonatele: {punctImpact}`)

        -- Verificăm dacă piesa lovită aparține unui inamic:
        local inamicUmanoid = piesaLovita.Parent:FindFirstChildWhichIsA("Humanoid")
        if inamicUmanoid then
            inamicUmanoid:TakeDamage(30)
            print("Lovitură reușită! -30 viață.")
        end
    else
        print("Raza nu a întâlnit niciun obstacol în traiectoria sa.")
    end
end
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Detecția Razelor (Raycasting) în Workspace: workspace:Raycast și RaycastParams

Ai o nelămurire despre utilizarea comenzii Detecția Razelor (Raycasting) în Workspace: workspace:Raycast și RaycastParams 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.