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.
Je kunt een straal uitzenden met de WorldRoot:Raycast() methode (Workspace:Raycast()) vanuit een Vector3 oorsprong in een Vector3 richting.
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.
De oorsprong plus een richtingsvector geeft de bestemming van de straal aan:
Trek van beide zijden van de vergelijking af:
De richting van de straal is gelijk aan de bestemming min de oorsprong:
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.
| Sleutel | Beschrijving |
|---|---|
| FilterDescendantsInstances | Array van objecten waarvan de afstammelingen worden gebruikt bij het filteren van raycasting kandidaten. |
| FilterType | Enum.RaycastFilterType enum die bepaalt hoe de FilterDescendantsInstances array wordt gebruikt in de raycast operatie. |
| IgnoreWater | Boolean die bepaalt of het Water materiaal wordt beschouwd bij raycasting tegen Terrain. |
| CollisionGroup | String naam van de botsingsgroep die wordt gebruikt voor de raycasting operatie. |
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.
| Eigenschap | Beschrijving |
|---|---|
| Instance | De BasePart of Terrain cel die de straal heeft gekruist. |
| Position | Vector3 positie van de intersectie tussen de straal en de Instance. |
| Distance | Afstand tussen de straal oorsprong en het intersectiepunt. |
| Material | De Enum.Material van de BasePart of Terrain op het intersectiepunt. |
| Normal | Vector3 van de normale vector van het gekruiste vlak. |
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