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.
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 .
Chave | Descrição |
---|---|
FilterDescendantsInstances | Array de objetos cujos descendentes são usados para filtrar candidatos a raycasting. |
FilterType | Enum.RaycastFilterTypeenum que determina como oFilterDescendantsInstancesarray é usado na operação de raycast. |
IgnoreWater | Booleano que determina se o material Água é considerado ao raycasting contra Terrain . |
CollisionGroup | Nome de grupo de colisão usado para a operação de raycasting. |
Filtragem de Raio
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 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.
A origem mais um vértice direcional indica a direção do raio:
rayOrigin + rayDirection = rayDestination
Subtrair rayOrigin dos dois lados da equação:
rayOrigin + rayDirection − rayOrigin = 0> rayDestination0> − 3> rayOrigin3>
A direção do raio corresponde ao destino minus o origem:
rayDirection = rayDestination − rayOrigin
local rayOrigin = workspace.TestOrigin.Positionlocal rayDestination = workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal 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.
Propriedade | Descrição |
---|---|
Instance | A BasePart ou Terrain célula que o raio interseccionou. |
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 interseção. |
Material | O Enum.Material da BasePart ou Terrain no ponto de interseção. |
Normal | Vector3 do vértice normal do rosto. |
Detecção de Hit 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