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
Întrebări & Exemple de Cod:
Detecția Razelor (Raycasting) în Workspace: workspace:Raycast și RaycastParamsAi o nelămurire despre utilizarea comenzii
Detecția Razelor (Raycasting) în Workspace: workspace:Raycast și RaycastParamssau 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.