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.
Vous pouvez tirer un rayon avec la méthode WorldRoot:Raycast() (Workspace:Raycast()) à partir d'une origine Vector3 dans une direction Vector3.
Basic Raycastlocal 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.
L'origine plus un vecteur directionnel indique la destination du rayon :
Soustrayez des deux côtés de l'équation :
La direction du rayon égale la destination moins l'origine :
local Workspace = game:GetService("Workspace")local rayOrigin = Workspace.TestOrigin.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal 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 |
|---|---|
| FilterDescendantsInstances | Array 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. |
| IgnoreWater | Booléen qui détermine si le matériau Eau est considéré lors du raycasting contre Terrain. |
| CollisionGroup | Nom en chaîne du groupe de collision utilisé pour l'opération de raycasting. |
Raycast Filteringlocal 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)
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 |
|---|---|
| Instance | Le BasePart ou la cellule de Terrain que le rayon a intersecté. |
| Position | Position Vector3 de l'intersection entre le rayon et le Instance. |
| Distance | Distance entre l'origine du rayon et le point d'intersection. |
| Material | Le Enum.Material du BasePart ou de Terrain au point d'intersection. |
| Normal | Vector3 du vecteur normal de la face intersectée. |
Raycast Hit Detectionlocal Workspace = game:GetService("Workspace")local rayOrigin = Vector3.zerolocal rayDirection = Vector3.new(0, -100, 0)local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)if raycastResult thenprint("Instance:", raycastResult.Instance)print("Position:", raycastResult.Position)print("Distance:", raycastResult.Distance)print("Material:", raycastResult.Material)print("Normal:", raycastResult.Normal)elsewarn("Aucun résultat de raycast !")end