Raycasting

*Deze inhoud is vertaald met behulp van AI (bèta) en kan fouten bevatten. Klik hier om deze pagina in het Engels te bekijken.

Op het meest basale niveau is raycasting de handeling van het uitzenden van een onzichtbare straal vanuit een Vector3 punt in een specifieke richting met een gedefinieerde lengte. Zodra de straal is uitgezonden, kun je detecteren of de straal een BasePart of Terrain cel raakt.

Lasers worden afgevuurd door zwevende bollen, en raycasting bepaalt of een laser een platform raakt. Platforms die door de lasers worden aangeraakt, worden tijdelijk vernietigd.

Je kunt een straal uitzenden met de WorldRoot:Raycast() methode (Workspace:Raycast()) vanuit een Vector3 oorsprong in een Vector3 richting.

Basis Raycast
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)

Wanneer van toepassing, kun je een onbekende richtingsvector (rayDirection) berekenen met een bekende oorsprong en bestemming. Dit is nuttig wanneer je een straal tussen twee punten wilt uitzenden die kunnen veranderen, zoals van de ene speler naar de andere.

  1. De oorsprong plus een richtingsvector geeft de bestemming van de straal aan:

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

  2. Trek rayOrigin\text{rayOrigin} van beide zijden van de vergelijking af:

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

  3. De richting van de straal is gelijk aan de bestemming min de oorsprong:

    rayDirection=rayDestination−rayOrigin\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)

Filteropties

WorldRoot:Raycast() accepteert een optioneel RaycastParams object dat de raycast vertelt om selectief bepaalde BaseParts op te nemen of uit te sluiten, het Water materiaal voor Terrain te negeren, of een botsingsgroep te gebruiken.

SleutelBeschrijving
FilterDescendantsInstancesArray van objecten waarvan de afstammelingen worden gebruikt bij het filteren van raycasting kandidaten.
FilterTypeEnum.RaycastFilterType enum die bepaalt hoe de FilterDescendantsInstances array wordt gebruikt in de raycast operatie.
  • Exclude — Elke BasePart wordt beschouwd behalve die welke afstammelingen zijn van objecten in de array.
  • Include — Alleen BaseParts die afstammelingen zijn van objecten in de array worden beschouwd.
IgnoreWaterBoolean die bepaalt of het Water materiaal wordt beschouwd bij raycasting tegen Terrain.
CollisionGroupString naam van de botsingsgroep die wordt gebruikt voor de raycasting operatie.
Raycast Filtering
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)

Botsingsdetectie

Als de raycasting operatie een geschikte BasePart of Terrain cel raakt, wordt een RaycastResult object geretourneerd met de resultaten. Om te testen op een botsing, bevestig dat het resultaat niet nil is en gebruik de volgende eigenschappen indien nodig.

EigenschapBeschrijving
InstanceDe BasePart of Terrain cel die de straal heeft gekruist.
PositionVector3 positie van de intersectie tussen de straal en de Instance.
DistanceAfstand tussen de straal oorsprong en het intersectiepunt.
MaterialDe Enum.Material van de BasePart of Terrain op het intersectiepunt.
NormalVector3 van de normale vector van het gekruiste vlak.
Raycast Botsingsdetectie
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("Instance:", raycastResult.Instance)
print("Position:", raycastResult.Position)
print("Distance:", raycastResult.Distance)
print("Material:", raycastResult.Material)
print("Normal:", raycastResult.Normal)
else
warn("Geen raycast resultaat!")
end
©2026 Roblox Corporation. Roblox, het Roblox-logo en Powering Imagination behoren tot onze geregistreerde en niet-geregistreerde handelsmerken in de VS en andere landen.