Rykastowanie

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

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.

Lasery są wystrzeliwane przez unoszące się kule, a rykastowanie określa, czy laser trafia w platformę. Platformy dotknięte przez lasery są tymczasowo niszczone.

Możesz rykastować wiązkę za pomocą metody WorldRoot:Raycast() (Workspace:Raycast()) z pochodzenia Vector3 w kierunku Vector3.

Podstawowe Rykastowanie

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 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.

  1. Pochodzenie plus wektor kierunkowy wskazują przeznaczenie wiązki:

    rayOrigin+rayDirection=rayDestination\text{rayOrigin} + \text{rayDirection} = \text{rayDestination}

  2. Odejmij rayOrigin\text{rayOrigin} od obu stron równania:

    rayOrigin+rayDirectionrayOrigin=rayDestinationrayOrigin\text{rayOrigin} + \text{rayDirection} - \text{rayOrigin} = \text{rayDestination} - \text{rayOrigin}

  3. Kierunek wiązki to przeznaczenie minus pochodzenie:

    rayDirection=rayDestinationrayOrigin\text{rayDirection} = \text{rayDestination} - \text{rayOrigin}


local Workspace = game:GetService("Workspace")
local rayOrigin = Workspace.TestOrigin.Position
local rayDestination = Workspace.TestDestination.Position
local rayDirection = rayDestination - rayOrigin
local 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.

KluczOpis
FilterDescendantsInstancesArray obiektów, których potomków używa się do filtrowania kandydatów do rykastowania.
FilterTypeEnum Enum.RaycastFilterType, który określa, jak tablica FilterDescendantsInstances jest używana w operacji rykastowania.
  • Exclude — Każda BasePart jest brana pod uwagę z wyjątkiem tych, które są potomkami obiektów w tablicy.
  • Include — Tylko BaseParts, które są potomkami obiektów w tablicy, są brane pod uwagę.
IgnoreWaterBoolean, który określa, czy materiał Woda jest brany pod uwagę podczas rykastowania przeciwko Terrain.
CollisionGroupStringowa nazwa grupy kolizji collision group używanej w operacji rykastowania.
Filtracja Rykastowania

local Workspace = game:GetService("Workspace")
local rayOrigin = Vector3.zero
local rayDirection = Vector3.new(0, -100, 0)
local raycastParams = RaycastParams.new()
raycastParams.FilterDescendantsInstances = {script.Parent}
raycastParams.FilterType = Enum.RaycastFilterType.Exclude
raycastParams.IgnoreWater = true
local 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
InstanceObiekt BasePart lub komórka Terrain, z którą wiązka się przecięła.
PositionPozycja Vector3 punktu przecięcia między wiązką a Instance.
DistanceOdległość między pochodzeniem wiązki a punktem przecięcia.
MaterialMaterial Enum.Material obiektu BasePart lub Terrain w punkcie przecięcia.
NormalVector3 normalnego wektora przeciętej powierzchni.
Wykrywanie Trafienia Rykastowania

local Workspace = game:GetService("Workspace")
local rayOrigin = Vector3.zero
local rayDirection = Vector3.new(0, -100, 0)
local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
if raycastResult then
print("Instancja:", raycastResult.Instance)
print("Pozycja:", raycastResult.Position)
print("Odległość:", raycastResult.Distance)
print("Materiał:", raycastResult.Material)
print("Normalna:", raycastResult.Normal)
else
warn("Brak wyniku rykastowania!")
end
©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.