Raycasting

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Au niveau le plus basique, le raycasting est l'acte d'envoyer un rayon invisible depuis un point Vector3 dans une direction spécifique avec une longueur définie. Une fois tiré, vous pouvez détecter si le rayon touche un BasePart ou une cellule de Terrain.

Des lasers sont tirés par des orbes flottants, et le raycasting détermine si un laser touche une plateforme. Les plateformes touchées par les lasers sont temporairement détruites.

Vous pouvez tirer un rayon avec la méthode WorldRoot:Raycast() (Workspace:Raycast()) à partir d'une origine Vector3 dans une direction Vector3.

Basic 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)

Lorsque cela est applicable, vous pouvez calculer un vecteur directionnel inconnu (rayDirection) en utilisant une origine et une destination connues. Ceci est utile lors du tir d'un rayon entre deux points pouvant changer, comme d'un personnage joueur à un autre.

  1. L'origine plus un vecteur directionnel indique la destination du rayon :

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

  2. Soustrayez rayOrigin\text{rayOrigin} des deux côtés de l'équation :

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

  3. La direction du rayon égale la destination moins l'origine :

    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)

Options de filtrage

WorldRoot:Raycast() accepte un objet RaycastParams optionnel qui indique au raycast d'inclure ou d'exclure sélectivement certains BaseParts, d'ignorer le matériau Eau pour Terrain, ou d'utiliser un groupe de collision.

CléDescription
FilterDescendantsInstancesArray d'objets dont les descendants sont utilisés pour filtrer les candidats au raycasting.
FilterTypeÉnumération Enum.RaycastFilterType qui détermine comment le tableau FilterDescendantsInstances est utilisé dans l'opération de raycast.
  • Exclude — Chaque BasePart est considéré sauf ceux qui sont descendants des objets dans le tableau.
  • Include — Seuls les BaseParts qui sont descendants des objets dans le tableau sont considérés.
IgnoreWaterBooléen qui détermine si le matériau Eau est considéré lors du raycasting contre Terrain.
CollisionGroupNom en chaîne du groupe de collision utilisé pour l'opération de raycasting.
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)

Détection des impacts

Si l'opération de raycasting touche un BasePart ou une cellule de Terrain éligible, un objet RaycastResult est renvoyé contenant les résultats. Pour tester la présence d'un impact, assurez-vous que le résultat n'est pas nil et utilisez les propriétés suivantes si nécessaire.

PropriétéDescription
InstanceLe BasePart ou la cellule de Terrain que le rayon a intersecté.
PositionPosition Vector3 de l'intersection entre le rayon et le Instance.
DistanceDistance entre l'origine du rayon et le point d'intersection.
MaterialLe Enum.Material du BasePart ou de Terrain au point d'intersection.
NormalVector3 du vecteur normal de la face intersectée.
Raycast Hit Detection

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("Aucun résultat de raycast !")
end
©2026 Société Roblox. Roblox, le logo Roblox et Powering Imagination font partie de nos marques déposées aux États-Unis et dans d'autres pays.