Na najprostszej płaszczyźnie, rykastowanie to akt wysyłania niewidocznej wiązki z punktu Vector3 w określonym kierunku z zdefiniowaną długością. Po rykastowaniu możesz wykryć, czy wiązka trafia w BasePart lub komórkę Terrain.
Możesz rykastować wiązkę za pomocą metody WorldRoot:Raycast() (Workspace:Raycast()) z pochodzenia Vector3 w kierunku Vector3.
Podstawowe Rykastowanielocal 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 możliwe, możesz obliczyć nieznany wektor kierunkowy (rayDirection) używając znanego pochodzenia i przeznaczenia. Jest to użyteczne, gdy rykastujesz wiązkę między dwoma punktami, które mogą się zmieniać, takimi jak od jednego gracza do drugiego.
Pochodzenie plus wektor kierunkowy wskazują przeznaczenie wiązki:
Odejmij od obu stron równania:
Kierunek wiązki to przeznaczenie minus pochodzenie:
local Workspace = game:GetService("Workspace")local rayOrigin = Workspace.TestOrigin.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
Opcje filtru
WorldRoot:Raycast() akceptuje opcjonalny obiekt RaycastParams, który informuje rykastowanie, aby selektywnie uwzględniało lub wykluczało określone BaseParts, ignorowało materiał Woda dla Terrain, lub używało grupy kolizji collision group.
| Klucz | Opis |
|---|---|
| FilterDescendantsInstances | Array obiektów, których potomków używa się do filtrowania kandydatów do rykastowania. |
| FilterType | Enum Enum.RaycastFilterType, który określa, jak tablica FilterDescendantsInstances jest używana w operacji rykastowania. |
| IgnoreWater | Boolean, który określa, czy materiał Woda jest brany pod uwagę podczas rykastowania przeciwko Terrain. |
| CollisionGroup | Stringowa nazwa grupy kolizji collision group używanej w operacji rykastowania. |
Filtracja Rykastowanialocal 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 trafienia
Jeśli operacja rykastowania trafia w kwalifikującą się BasePart lub komórkę Terrain, zwracany jest obiekt RaycastResult zawierający wyniki. Aby sprawdzić trafienie, upewnij się, że wynik nie jest nil i wykorzystaj następujące właściwości w razie potrzeby.
| Właściwość | Opis |
|---|---|
| Instance | Obiekt BasePart lub komórka Terrain, z którą wiązka się przecięła. |
| Position | Pozycja Vector3 punktu przecięcia między wiązką a Instance. |
| Distance | Odległość między pochodzeniem wiązki a punktem przecięcia. |
| Material | Material Enum.Material obiektu BasePart lub Terrain w punkcie przecięcia. |
| Normal | Vector3 normalnego wektora przeciętej powierzchni. |
Wykrywanie Trafienia Rykastowanialocal Workspace = game:GetService("Workspace")local rayOrigin = Vector3.zerolocal rayDirection = Vector3.new(0, -100, 0)local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)if raycastResult thenprint("Instancja:", raycastResult.Instance)print("Pozycja:", raycastResult.Position)print("Odległość:", raycastResult.Distance)print("Materiał:", raycastResult.Material)print("Normalna:", raycastResult.Normal)elsewarn("Brak wyniku rykastowania!")end