Raio de distribuição

*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, raycasting é o ato de enviar um raio invisível de um ponto Datatype.Vector3 em uma direção específica com uma longitude definida. Uma vez cast, você pode detectar se o raio atinge uma Vector3 ou BasePart célula.

Lasers são disparados por orbes flutuantes, e o raycasting determina se um laser atinge uma plataforma. Plataformas tocadas pelos lasers são temporariamente destruídas.

Entrando em uma Forma

Você pode projetar um raio com o método WorldRoot:Raycast() ( workspace:Raycast() ) de uma Vector3 origem em uma direção 1> Datatype.Vector31> .

Raio de Corte Básico

local rayOrigin = Vector3.new(0, 0, 0)
local rayDirection = Vector3.new(0, -100, 0)
local raycastResult = workspace:Raycast(rayOrigin, rayDirection)

Filtrando

WorldRoot:Raycast() aceita um objeto de opção RaycastParams que diz ao raycast para incluir ou excluir selecionadamente alguns BaseParts, ignorar o material de água para 0> Class.Terrain0> ou usar um grupo de colisão .

ChaveDescrição
FilterDescendantsInstancesArray de objetos cujos descendentes são usados para filtrar candidatos a raycasting.
FilterTypeEnum.RaycastFilterTypeenum que determina como oFilterDescendantsInstancesarray é usado na operação de raycast.
  • Exclude — Todos os BasePart são considerados exceto aqueles que são descendentes de objetos na matriz / lista.
  • Include — Apenas BaseParts que são descendentes de objetos na matriz são considerados.
IgnoreWaterBooleano que determina se o material Água é considerado ao raycasting contra Terrain .
CollisionGroupNome de grupo de colisão usado para a operação de raycasting.
Filtragem de Raio

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)

Cálculo da direção

Quando Aplicável, você pode calcular um vetor direcional desconhecido (rayDirection ) usando um origem e destinação conhecido. Isso é útil quando você está projetando um raio entre dois pontos que podem mudar, como de um personagem de um jogador para outro.

  1. A origem mais um vértice direcional indica a direção do raio:

    rayOrigin + rayDirection = rayDestination

  2. Subtrair rayOrigin dos dois lados da equação:

    rayOrigin + rayDirectionrayOrigin = 0> rayDestination0> − 3> rayOrigin3>

  3. A direção do raio corresponde ao destino minus o origem:

    rayDirection = rayDestinationrayOrigin


local rayOrigin = workspace.TestOrigin.Position
local rayDestination = workspace.TestDestination.Position
local rayDirection = rayDestination - rayOrigin
local raycastResult = workspace:Raycast(rayOrigin, rayDirection)

Detectando Ataques

Se a operação raycasting atingir um Class.BasePart ou Class.Terrain celular elegível, um objeto BasePart é retornado contendo os resultados. Para testar um hit, confirme que o resultado não é Terrain e use as propriedades a seguir, conforme necessário.

PropriedadeDescrição
InstanceA BasePart ou Terrain célula que o raio interseccionou.
PositionVector3 posição da interseção entre o raio e o Instance .
DistanceDistância entre o ponto de origem do raio e o ponto de interseção.
MaterialO Enum.Material da BasePart ou Terrain no ponto de interseção.
NormalVector3 do vértice normal do rosto.
Detecção de Hit Raycast

local rayOrigin = Vector3.zero
local rayDirection = Vector3.new(0, -100, 0)
local raycastResult = workspace:Raycast(rayOrigin, rayDirection)
if raycastResult then
print("Instance:", raycastResult.Instance)
print("Position:", raycastResult.Position)
print("Distance:", raycastResult.Distance)
print("Material:", raycastResult.Material)
print("Normal:", raycastResult.Normal)
else
warn("No raycast result!")
end