En su nivel más básico, raycasting es el acto de enviar un rayo invisible desde un punto de Datatype.Vector3 con una dirección específica con una longitud definida. Una vez cast, puede detectar si el rayo golpea un Vector3 o BasePart celda.
Proyectar un Rayo
Puedes lanzar un rayo con el método WorldRoot:Raycast() ( workspace:Raycast() ) desde una fuente de Datatype.Vector3 en una dirección de Vector3 .
Raycast básico
local rayOrigin = Vector3.new(0, 0, 0)local rayDirection = Vector3.new(0, -100, 0)local raycastResult = workspace:Raycast(rayOrigin, rayDirection)
Filtrado
Class.WorldRoot:Raycast() acepta un objeto de RaycastParams opcional que le dice al raycast que seleccione o excluya ciertos BaseParts , ignore el material de 0>Water0> para WorldRoot:Raycast()3> o use un grupo de colisión .
Clave | Descripción |
---|---|
FilterDescendantsInstances | Array de objetos cuyos descendientes se usan para filtrar candidatos de raycasting. |
FilterType | Enum.RaycastFilterTypeenum que determina cómoFilterDescendantsInstancesarray se usa en la operación de raycast. |
IgnoreWater | Booleano que determina si el material Agua se considera al raycasting en contra de Terrain . |
CollisionGroup | Nombre de la cadena del grupo de colisión usado para la operación de raycasting. |
Raycast Filtro
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)
Cálculo de dirección
Cuando sea aplicable, puede calcular un vector direccional desconocido ( rayDirection ) utilizando un conocido origen y destino . Esto es útil cuando se proyecta un rayo entre dos puntos que se pueden cambiar, como desde un personaje de un jugador a otro.
La dirección más un vector direccional indican la dirección del rayo:
rayOrigin + dirección de rayo = dirección de rayo
Sustrae rayOrigin de ambos lados de la ecuación:
rayOrigin + rayDirection − rayOrigin = 0> rayDestination0> + 3> rayOrigin3>
La dirección de la rayas es la misma que la minus de la raya de origen:
rayDirection = rayDestination − rayOrigin
local rayOrigin = workspace.TestOrigin.Positionlocal rayDestination = workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = workspace:Raycast(rayOrigin, rayDirection)
Detectando golpes
Si la operación de raycasting golpea un BasePart o Terrain celda, un objeto de 2> Datatype.RaycastResult2> se devuelve que contiene los resultados. Para probar un golpe, asegúrese de que el resultado no es 5> nil5> y utilice las siguientes propiedades como necesario.
Propiedad | Descripción |
---|---|
Instance | La BasePart o Terrain celda que el rayo intersección. |
Position | Vector3 posición de la intersección entre el rayo y el Instance . |
Distance | Distancia entre el punto de 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 vértice normal de la cara intersección. |
Detecta golpes con Raycast
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