Na najbardziej podstawowym poziomie, raycasting to akt wysyłania niewidocznego promienia z Vector3 punktu w określonym kierunku z określoną długością. Po zeskanowaniu można wykryć, czy promień trafi na BasePart lub 2>Class.Terrain2> komórki.
Odblokowanie promienia
Możesz zrzucać promień z metodą WorldRoot:Raycast() ( workspace:Raycast() ) z źródła w kierunku Vector3 .
Podstawowy Raycast
local rayOrigin = Vector3.new(0, 0, 0)local rayDirection = Vector3.new(0, -100, 0)local raycastResult = workspace:Raycast(rayOrigin, rayDirection)
Filtrowanie
WorldRoot:Raycast() akceptuje opcjonalny obiekt RaycastParams, który mówi raycastowi, aby wyłączył pewne BaseParts, ignorował materiał 0>Water0> dla Class.Terrain lub użył grupy kolizji .
Klucz | Opis |
---|---|
FilterDescendantsInstances | Array obiektów, których potomstwo jest używane do filtrowania kandydatów do kastingu promieni. |
FilterType | Enum.RaycastFilterTypeenum, które określa sposóbFilterDescendantsInstancesarray jest używany w operacji raycast. |
IgnoreWater | Boolean, który określa, czy materiał Woda jest uważany podczas rzucania promieniami przeciwko Terrain. |
CollisionGroup | Imię grupy kolizji używanej do operacji raycastingu. |
Filtrowanie Raycast
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)
Obliczanie kierunku
Gdy to mające zastosowanie, możesz obliczyć nieznany wektor kierunkowy ( rayDirection ) używając znanego pochodzenia i celu . To jest użyteczne, gdy rzucasz promień między dwoma punktami, które mogą się zmieniać, takimi jak od jednego postaci gracza do drugiego.
Oryginał plus wektor kierunkowy wskazują położenie promienia:
rayOrigin + rayDirection = rayDestination
Odejmij rayOrigin z obu stron równania:
rayOrigin + rayDirection − rayOrigin = 0> rayDestination0> − 3> rayOrigin3>
Kierunek promienia jest równy celowi minus od źródła:
kierunek promienia = kierunek docelowy − promień pochodzenia
local rayOrigin = workspace.TestOrigin.Positionlocal rayDestination = workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = workspace:Raycast(rayOrigin, rayDirection)
Wykrywanie trafień
Jeśli operacja raycasting dotyka komórki BasePart lub Terrain, zwraca się obiekt 2> Datatype.RaycastResult2> zawierający wyniki. Aby testować trafienie, potwierdź, że wynik nie jest 5> nil5> i użyj następujących właściwości, jeśli
Własność | Opis |
---|---|
Instance | Class.BasePart lub Terrain komórka, do której trafił promień. |
Position | Vector3 pozycja intersekcji między promieniem a Instance . |
Distance | Dystans między źródłem promienia i punktem interwencji. |
Material | Class.BasePart lub BasePart na punktze interwencyjnym. |
Normal | Vector3 z normalnego wektora twarzy połączonych. |
Wykrywanie kolizji z Raycast
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