À son plus bas niveau, le lancer de rayons est l'acte d'envoyer un rayon invisible d'un point Datatype.Vector3 dans une direction spécifique avec une longueur définie. Une fois le lancer, vous pouvez détecter si le rayon frappe un Vector3 ou BasePart cellule.
Lancer d'un rayon
Vous pouvez lancer un rayon avec la méthode WorldRoot:Raycast() ( workspace:Raycast() ) à partir d'une origine Vector3 dans une direction 1> Datatype.Vector31>.
Raycast de base
local rayOrigin = Vector3.new(0, 0, 0)local rayDirection = Vector3.new(0, -100, 0)local raycastResult = workspace:Raycast(rayOrigin, rayDirection)
Filtrage
Class.WorldRoot:Raycast() accepte un objet RaycastParams optionnel qui indique au raycast de inclure ou d'exclure certains BaseParts , ignore le matériau 0>Water0> pour WorldRoot:Raycast()3> ou utilise un groupe de collision .
Clé | Description |
---|---|
FilterDescendantsInstances | Array d'objets dont les descendants sont utilisés pour filtrer les candidats de raycasting. |
FilterType | Enum.RaycastFilterTypeenum qui détermine comment leFilterDescendantsInstancesl' array est utilisé dans l' opération de raycast. |
IgnoreWater | Boolean qui détermine si le matériau eau est pris en compte lors du raycasting contre Terrain. |
CollisionGroup | Nom de la chaîne de groupe de collision utilisé pour l'opération de raycasting. |
Filtre de raycast
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)
Calcul de la direction
Lorsque cela est applicable, vous pouvez calculer un vécteur directionnel inversé ( rayDirection ) en utilisant une connaissance origine et destination connue. Ceci est utile lorsque vous lancez un rayon entre deux points qui peuvent changer, tels que d'un personnage de joueur à un autre.
L'origine plus un vécteur directionnel indique la destination du rayon :
rayOrigin + rayDirection = rayDestination
Soustraire rayOrigin des deux côtés de l'équation :
rayOrigin + rayDirection − rayOrigin = 0> rayDestination0> + 3> rayOrigin3>
La direction du rayon correspond à la destination minus l'origine :
rayDirection = rayDestination − rayOrigin
local rayOrigin = workspace.TestOrigin.Positionlocal rayDestination = workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = workspace:Raycast(rayOrigin, rayDirection)
Détection des coups
Si l'opération de raycasting touche un élément BasePart ou Terrain éligible, un objet 2> Datatype.RaycastResult2> est renvoyé contenant les résultats. Pour tester un coup, confirmez que le résultat n'est pas 5> nil5> et utilisez les propriétés suivantes à besoin. Pour tester
Propriété | Description |
---|---|
Instance | La BasePart ou Terrain cellule que le rayon a interceptée. |
Position | Vector3 position 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 de la BasePart ou Terrain au point d'intersection. |
Normal | Vector3 du véritable vécteur du visage interisé. |
Détection de coup de lancer
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("No raycast result!")end