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.
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ásicolocal 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.
A origem mais um vetor direcional indica o destino do raio:
Subtraia de ambos os lados da equação:
A direção do raio é igual ao destino menos a origem:
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 informa ao raiocasting para incluir ou excluir seletivamente certas BaseParts, ignorar o material Water para Terrain, ou usar um grupo de colisão.
| Chave | Descrição |
|---|---|
| FilterDescendantsInstances | Array de objetos cujos descendentes são usados na filtragem de candidatos a raiocasting. |
| FilterType | Enum Enum.RaycastFilterType que determina como o array FilterDescendantsInstances é usado na operação de raiocasting. |
| IgnoreWater | Booleano que determina se o material Water é considerado ao raiocar contra Terrain. |
| CollisionGroup | Nome da string do grupo de colisão usado para a operação de raiocasting. |
Filtragem de Raycastlocal 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 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.
| Propriedade | Descrição |
|---|---|
| Instance | A BasePart ou célula de Terrain que o raio intersectou. |
| Position | Posição Vector3 da interseção entre o raio e a Instance. |
| Distance | Distância entre a 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 vetor normal da face intersectada. |
Detecção de Impacto de Raycastlocal Workspace = game:GetService("Workspace")local rayOrigin = Vector3.zerolocal rayDirection = Vector3.new(0, -100, 0)local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)if raycastResult thenprint("Instância:", raycastResult.Instance)print("Posição:", raycastResult.Position)print("Distância:", raycastResult.Distance)print("Material:", raycastResult.Material)print("Normal:", raycastResult.Normal)elsewarn("Nenhum resultado de raiocasting!")end