Raios

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Em seu nível mais básico, raiocasting é o ato de enviar um raio invisível de um ponto Vector3 em uma direção específica com um comprimento definido. Uma vez lançado, você pode detectar se o raio atinge uma BasePart ou célula de Terrain.

Los lasers são disparados por orbes flutuantes, e o raiocasting determina se um laser atinge uma plataforma. As plataformas tocadas pelos lasers são destruídas temporariamente.

Você pode lançar um raio com o método WorldRoot:Raycast() (Workspace:Raycast()) de uma origem Vector3 em uma direção 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)

Quando aplicável, você pode calcular um vetor direcional desconhecido (rayDirection) usando uma origem e destino conhecidos. Isso é útil ao lançar um raio entre dois pontos que podem mudar, como de um personagem jogador para outro.

  1. A origem mais um vetor direcional indica o destino do raio:

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

  2. Subtraia rayOrigin\text{rayOrigin} de ambos os lados da equação:

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

  3. A direção do raio é igual ao destino menos a origem:

    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)

Opções de filtro

WorldRoot:Raycast() aceita um objeto opcional RaycastParams que informa ao raiocasting para incluir ou excluir seletivamente certas BaseParts, ignorar o material Water para Terrain, ou usar um grupo de colisão.

ChaveDescrição
FilterDescendantsInstancesArray de objetos cujos descendentes são usados na filtragem de candidatos a raiocasting.
FilterTypeEnum Enum.RaycastFilterType que determina como o array FilterDescendantsInstances é usado na operação de raiocasting.
  • Exclude — Cada BasePart é considerado exceto aqueles que são descendentes de objetos no array.
  • Include — Somente BaseParts que são descendentes de objetos no array são considerados.
IgnoreWaterBooleano que determina se o material Water é considerado ao raiocar contra Terrain.
CollisionGroupNome da string do grupo de colisão usado para a operação de raiocasting.
Filtragem 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)

Detecção de impacto

Se a operação de raiocasting atingir uma BasePart ou célula de Terrain elegível, um objeto RaycastResult é retornado contendo os resultados. Para testar se houve uma colisão, confirme que o resultado não é nil e utilize as seguintes propriedades conforme necessário.

PropriedadeDescrição
InstanceA BasePart ou célula de Terrain que o raio intersectou.
PositionPosição Vector3 da interseção entre o raio e a Instance.
DistanceDistância entre a origem do raio e o ponto de interseção.
MaterialO Enum.Material da BasePart ou Terrain no ponto de interseção.
NormalVector3 do vetor normal da face intersectada.
Detecção 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("Instância:", raycastResult.Instance)
print("Posição:", raycastResult.Position)
print("Distância:", raycastResult.Distance)
print("Material:", raycastResult.Material)
print("Normal:", raycastResult.Normal)
else
warn("Nenhum resultado de raiocasting!")
end
©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.