Raycasting

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

En su nivel más básico, raycasting es el acto de enviar un rayo invisible desde un punto de Vector3 en una dirección específica con una longitud definida. Una vez emitido, puedes detectar si el rayo impacta un BasePart o una celda de Terrain.

Los láseres son disparados por orbes flotantes, y el raycasting determina si un láser impacta una plataforma. Las plataformas tocadas por los láseres son destruidas temporalmente.

Puedes emitir un rayo con el método WorldRoot:Raycast() (Workspace:Raycast()) desde un origen de Vector3 en una dirección de Vector3.

Raycast Básico

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)

Cuando sea aplicable, puedes calcular un vector direccional desconocido (rayDirection) utilizando un origen y un destino conocidos. Esto es útil cuando emites un rayo entre dos puntos que pueden cambiar, como de un personaje jugador a otro.

  1. El origen más un vector direccional indican el destino del rayo:

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

  2. Resta rayOrigin\text{rayOrigin} de ambos lados de la ecuación:

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

  3. La dirección del rayo es igual al destino menos el origen:

    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)

Opciones de filtro

WorldRoot:Raycast() acepta un objeto opcional RaycastParams que indica al raycast que incluya o excluya selectivamente ciertos BaseParts, ignore el material Agua para Terrain o use un grupo de colisión.

ClaveDescripción
FilterDescendantsInstancesArray de objetos cuyos descendientes se utilizan en el filtrado de candidatos de raycasting.
FilterTypeEnum RaycastFilterType que determina cómo se utiliza el array FilterDescendantsInstances en la operación de raycast.
  • Exclude — Cada BasePart se considera excepto aquellos que son descendientes de objetos en el array.
  • Include — Solo se consideran BaseParts que son descendientes de objetos en el array.
IgnoreWaterBoolean que determina si el material Agua se considera al realizar raycasting contra Terrain.
CollisionGroupNombre en forma de cadena del grupo de colisión utilizado para la operación de raycasting.
Filtrado 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)

Detección de impactos

Si la operación de raycasting impacta un BasePart o una celda de Terrain elegible, se devuelve un objeto RaycastResult que contiene los resultados. Para probar por un impacto, confirma que el resultado no es nil y utiliza las siguientes propiedades según sea necesario.

PropiedadDescripción
InstanceEl BasePart o la celda de Terrain que el rayo intersectó.
PositionPosición Vector3 de la intersección entre el rayo y el Instance.
DistanceDistancia entre el origen del rayo y el punto de intersección.
MaterialEl Enum.Material del BasePart o Terrain en el punto de intersección.
NormalVector3 del vector normal de la cara intersectada.
Detección de Impacto de Raycast

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("Instancia:", raycastResult.Instance)
print("Posición:", raycastResult.Position)
print("Distancia:", raycastResult.Distance)
print("Material:", raycastResult.Material)
print("Normal:", raycastResult.Normal)
else
warn("¡Sin resultado de raycast!")
end
©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.