En su nivel más básico, raycasting es el acto de enviar un rayo invisible desde un punto Vector3 específico en una dirección definida con una longitud definida.Una vez lanzado, puedes detectar si el rayo golpea una celda BasePart o Terrain .
Puedes lanzar un rayo con el método WorldRoot:Raycast() ( Workspace:Raycast() ) desde un origen Vector3 en una dirección Vector3.
Lanzamiento de rayo 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 ( ) usando un origen conocido y un destino conocido .Esto es útil al lanzar un rayo entre dos puntos que pueden cambiar, como de un personaje de jugador a otro.
El origen más un vector direccional indican el destino del rayo:
rayOrigin + rayDirection = rayDestination
Resta rayOrigin de ambos lados de la ecuación:
rayOrigin + rayDirection − rayOrigin = rayDestination − rayOrigin
La dirección del rayo iguala al destino menos el origen:
dirección de rayo = destino de rayo − origen de rayo
local Workspace = game:GetService("Workspace")local rayOrigin = Workspace.TestOrigin.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
Opciones de filtro
acepta un objeto opcional que le dice al raycast que incluya o excluya selectivamente ciertos , ignore el material de agua para o use un grupo de colisión .
Clave | Descripción |
---|---|
FilterDescendantsInstances | Array de objetos cuyos descendientes se utilizan en la filtración de candidatos de raycasting |
FilterType | Enum.RaycastFilterType enum que determina cómo se usa el FilterDescendantsInstances array en la operación de raycast. |
IgnoreWater | Booleano que determina si el material Agua se considera al lanzar rayos contra Terrain. |
CollisionGroup | Nombre de cadena del grupo de colisión usado para la operación de lanzamiento de rayos. |
Filtrado de raycast
local 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)
Detección de golpes
Si la operación de lanzamiento de rayos golpea una celda elegible BasePart o Terrain, se devuelve un objeto RaycastResult que contiene los resultados.Para probar un golpe, confirma que el resultado no es nil y utiliza las siguientes propiedades según sea necesario.
Propiedad | Descripción |
---|---|
Instance | La celda BasePart o Terrain que el rayo interseccionó. |
Position | Vector3 posición de la intersección entre el rayo y el Instance. |
Distance | Distancia entre el origen del rayo y el punto de intersección. |
Material | El Enum.Material de la BasePart o Terrain en el punto de intersección. |
Normal | Vector3 del vector normal del rostro interseccionado. |
Detección de golpes de raycast
local 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("No raycast result!")end