Em seu nível mais básico, raycasting é o ato de enviar um raio invisível de um ponto Vector3 específico em uma direção definida com um comprimento definido.Uma vez lançado, você pode detectar se o raio atinge uma célula BasePart ou Terrain .
Você pode lançar um raio com o método WorldRoot:Raycast() ( Workspace:Raycast() ) de uma origem Vector3 em uma direção Vector3.
Lançamento de Raio 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)
Quando Aplicável, você pode calcular um vetor direcional desconhecido ( rayDirection ) usando um conhecido origem e destino .Isso é útil ao lançar um raio entre dois pontos que podem mudar, como de um personagem de um jogador para outro.
A origem mais um vetor direcional indica o destino do raio:
raioOrigin + direção do raio = destino do raio
Subtraia rayOrigin de ambos os lados da equação:
raioOrigin + direção do raio − raioOrigin = destino do raio − raioOrigin
A direção do raio iguala o destino menos a origem:
direção de raio = destino de raio - origem de raio
local Workspace = game:GetService("Workspace")local rayOrigin = Workspace.TestOrigin.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
Opções de filtro
WorldRoot:Raycast() aceita um objeto opcional RaycastParams que diz ao raycast para incluir ou excluir seletivamente determinados BaseParts , ignorar o material Água para Terrain ou usar um grupo de colisão.
Chave | Descrição |
---|---|
FilterDescendantsInstances | Array de objetos cujos descendentes são usados para filtrar candidatos de lançamento de raios |
FilterType | Enum.RaycastFilterType enum que determina como o FilterDescendantsInstances array é usado na operação de raycast. |
IgnoreWater | Booleano que determina se o material Água é considerado ao lançar raios contra Terrain. |
CollisionGroup | Nome da string do grupo de colisão usado para a operação de lançamento de raios. |
Filtagem 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)
Detecção de acerto
Se a operação de lançamento de raio atingir uma célula elegível BasePart ou Terrain, um objeto RaycastResult é retornado contendo os resultados.Para testar um hit, confirme que o resultado não é nil e utilize as seguintes propriedades conforme necessário.
Propriedade | Descrição |
---|---|
Instance | A célula BasePart ou Terrain que o raio intersectou. |
Position | Vector3 posição da interseção entre o raio e o Instance . |
Distance | Distância entre o ponto de origem do raio e o ponto de intersecção. |
Material | O Enum.Material da BasePart ou Terrain no ponto de intersecção. |
Normal | Vector3 da normal do vetor do rosto intersecado. |
Detecção de Ataque de Raio
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