util.IntersectRayWithOBB

  Vector, Vector, number util.IntersectRayWithOBB( Vector rayStart, Vector rayDelta, Vector boxOrigin, Angle boxAngles, Vector boxMins, Vector boxMaxs )

Açıklama

Bir Işın-OBB (Yönlendirilmiş Sınırlayıcı Kutu) kesişimi gerçekleştirir ve bir kesişim varsa pozisyonu, normali ve kesir değerini döndürür.

Argümanlar

1 Vector rayStart
Işının başlangıç noktası veya pozisyonu.
2 Vector rayDelta
Işın vektörünün kendisi, başlangıç noktasına göre ışın bitiş noktası. yön * mesafe olarak uygulanabilir.

Bu uygulamada ışının sonsuz olmadığını - yalnızca bir segment olduğunu unutmayın.

3 Vector boxOrigin
Kutunun merkezi.
4 Angle boxAngles
Kutunun açısı.
5 Vector boxMins
Kutunun minimum pozisyonu.
6 Vector boxMaxs
Kutunun maksimum pozisyonu.

Dönen Değerler

1 Vector
Vuruş pozisyonu, vurmadıysa nil.
2 Vector
Normal/yön vektörü, vurmadıysa nil.
3 number
Kullanılan izleme kesri, vurmadıysa nil.

Örnek

Fonksiyonun görselleştirme ile örnek kullanımını gösteren basit bir örnek. Oyun içi konsola developer 1 yazın ve herhangi bir entity'e bakın. Kesişim yoksa kırmızı bir kutu, kesişim varsa yeşil bir kutu gösterecektir.

Lütfen örneğin bir kutu oluşturmak için bir entity kullandığını, ancak bunun zorunlu olmadığını unutmayın. Buradaki asıl amaç, fiziksel olmayan nesnelere karşı kesişim kontrolleri yapmaktır, örneğin oyun dünyasındaki bir kullanıcı arayüzü ekranı veya bir oyuncunun (ya da bir NPC'nin) haritanın belirli bir bölümüne bakıp bakmadığını test etmek gibi.

-- Baktığımız entity'i sakla local ent = NULL -- Bunu her karede yap hook.Add( "Think", "Think_IntersectRayWithOBBExample", function() -- Oyuncu nesnesini sakla local ply = Entity( 1 ) -- Eğer oyuncu geçerli bir entity'e baktıysa, bizim entity'mizi ona değiştir local trEnt = ply:GetEyeTrace().Entity if ( IsValid( trEnt ) ) then ent = trEnt end -- Entity yok mu? hiçbir şey yapma if ( !IsValid( ent ) ) then return end -- Oyuncunun gözlerinden entity'nin OBB'sine karşı bir ışın kesişimi gerçekleştir local hitPos, hitNormal, frac = util.IntersectRayWithOBB( ply:GetShootPos(), ply:GetAimVector() * 500, ent:GetPos() + ent:OBBCenter(), ent:GetAngles(), ent:OBBMins(), ent:OBBMaxs() ) -- print( "sonuç: ", hitPos, hitNormal, frac ) -- Hata ayıklama için -- OBB görselleştirmesini çiz, konsolda developer 1 gerektirir. debugoverlay.BoxAngles( ent:OBBCenter() + ent:GetPos(), ent:OBBMins(), ent:OBBMaxs(), ent:GetAngles(), 0.01, hitPos != nil and Color(0,255,0) or Color( 255,0, 0) ) end )

Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord