Na najbardziej podstawowym poziomie, rozpraszanie promieni jest aktem wysyłania niewidzialnego promienia z punktu Vector3 w określonym kierunku o określonej długości.Po wystrzeleniu możesz wykryć, czy promień uderza w komórkę BasePart lub Terrain.
Możesz wystrzelić promień za pomocą metody WorldRoot:Raycast() ( Workspace:Raycast() ) z źródła Vector3 w kierunku Vector3.
Podstawowy rzut promieni
local Workspace = game:GetService("Workspace")local rayOrigin = Vector3.new(0, 0, 0)local rayDirection = Vector3.new(0, -100, 0)local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
Gdy to mające zastosowanie, możesz obliczyć nieznany wektor kierunkowy ( rayDirection ) za pomocą znanego pochodzenia i docelu .Jest to przydatne, gdy rzuca się promień między dwoma punktami, które mogą się zmienić, takimi jak od jednej postaci gracza do drugiej.
Pochodzenie plus wektor kierunkowy wskazują cel promienia:
źródło promieni + kierunek promieni = cel promieni
Odejmij rayOrigin z obu stron równania:
rayOrigin + rayDirection − rayOrigin = rayDestination − rayOrigin
Kierunek promienia równa się celowi pomniejszonemu o pochodzenie:
kierunek promienia = cel promienia − pochodzenie promienia
local Workspace = game:GetService("Workspace")local rayOrigin = Workspace.TestOrigin.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
Opcje filtrowania
akceptuje opcjonalny obiekt , który mówi, aby promieniowanie wybierało lub pomijało określone , ignorowało materiał wodny dla lub używało grupy kolizyjnej .
Klucz | Opis |
---|---|
FilterDescendantsInstances | Array z obiektów, których potomkowie są używane do filtrowania kandydatów do raycastingu |
FilterType | Enum.RaycastFilterType enum, które określa, w jaki sposób matryca FilterDescendantsInstances jest używana w operacji raycast. |
IgnoreWater | Boolean, który określa, czy materiał Woda jest rozważany przy rzucaniu promieni przeciwko Terrain . |
CollisionGroup | Nazwa ciągu zderzeniowego grupy kolizyjnej używana do operacji rzucania promieni. |
Filtracja Raycast
local Workspace = game:GetService("Workspace")local rayOrigin = Vector3.zerolocal rayDirection = Vector3.new(0, -100, 0)local raycastParams = RaycastParams.new()raycastParams.FilterDescendantsInstances = {script.Parent}raycastParams.FilterType = Enum.RaycastFilterType.ExcluderaycastParams.IgnoreWater = truelocal raycastResult = Workspace:Raycast(rayOrigin, rayDirection, raycastParams)
Wykrywanie trafień
Jeśli operacja rzucania promieni trafi na kwalifikującą się komórkę BasePart lub Terrain, zostanie zwrócony obiekt RaycastResult, zawierający wyniki.Aby przetestować trafienie, potwierdź, że wynik nie jest nil i wykorzystaj następujące właściwości w razie potrzeby.
Właściwość | Opis |
---|---|
Instance | Komórka BasePart lub Terrain, w której promień się skrzyżował. |
Position | Vector3 pozycja intersekcji między promieniem a Instance. |
Distance | Odległość między punktem pochodzenia promienia a punktem styku. |
Material | The Enum.Material of the BasePart lub Terrain na punkcie styku. |
Normal | Vector3 z normalnego wektora intersekcyjnej twarzy. |
Wykrywanie trafień Raycast
local Workspace = game:GetService("Workspace")local rayOrigin = Vector3.zerolocal rayDirection = Vector3.new(0, -100, 0)local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)if raycastResult thenprint("Instance:", raycastResult.Instance)print("Position:", raycastResult.Position)print("Distance:", raycastResult.Distance)print("Material:", raycastResult.Material)print("Normal:", raycastResult.Normal)elsewarn("No raycast result!")end