Lancer de rayons

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

A son niveau le plus basique, le lancer de rayons est l'acte d'envoyer un rayon invisible à partir d'un point Vector3 spécifique dans une direction définie avec une longueur définie.Une fois lancé, vous pouvez détecter si le rayon frappe une cellule BasePart ou Terrain .

Les lasers sont tirés par des orbes flottants, et le lancer de rayons détermine si un laser frappe une plate-forme.Les plateformes touchées par les lasers sont temporairement détruites.

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

Lancer de rayon basique

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 ( ) en utilisant une origine connue et une destination .Cela est utile lors du lancement d'un rayon entre deux points qui peuvent changer, comme d'un personnage joueur à un autre.

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

    origine de rayon + direction de rayon = destination de rayon

  2. Soustraire rayOrigin des deux côtés de l'équation :

    rayOrigin + rayDirectionrayOrigin = rayDestinationrayOrigin

  3. La direction du rayon correspond à la destination moins l'origine :

    direction de rayon = destination de rayonorigine de rayon


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

accepte un objet optionnel qui indique au lancer de rayons de sélectionner ou d'exclure de façon sélective certains , d'ignorer le matériau eau pour ou d'utiliser un groupe de collision .

CléAvertissement
FilterDescendantsInstancesArray d'objets dont les descendants sont utilisés dans le filtrage des candidats de lancer de rayons
FilterTypeEnum.RaycastFilterType enum qui détermine comment l'array FilterDescendantsInstances est utilisée dans l'opération de lancer de rayons.
  • Exclude — Chaque BasePart est considéré comme excepté ceux qui sont les descendants d'objets dans l'matrice.
  • Include — Seuls BaseParts les descendants d'objets dans l'array sont considérés.
IgnoreWaterBoolean qui détermine si le matériau eau est pris en compte lors du lancer de rayons contre Terrain .
CollisionGroupNom de chaîne du groupe de collision utilisé pour l'opération de lancer de rayons.
Filtre de raycast

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 coups

Si l'opération de lancer de rayons frappe une cellule éligible BasePart ou Terrain, un objet RaycastResult est retourné contenant les résultats.Pour tester un hit, confirmez que le résultat n'est pas nil et utilisez les propriétés suivantes comme nécessaire.

PropriétéAvertissement
InstanceLa cellule BasePart ou Terrain dans laquelle le rayon a intersecté.
PositionVector3 position 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 Terrain au point d'intersection.
NormalVector3 du vecteur normal de la face intersectionnée.
Détection des coups de lancer de rayons

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("No raycast result!")
end