Raycasting

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

A un livello base, il raycasting è l'atto di inviare un raggio invisibile da un punto Vector3 in una direzione specifica con una lunghezza definita. Una volta emesso, puoi rilevare se il raggio colpisce un BasePart o una cella di Terrain.

I laser vengono sparati da orbs fluttuanti e il raycasting determina se un laser colpisce una piattaforma. Le piattaforme toccate dai laser vengono temporaneamente distrutte.

Puoi emettere un raggio usando il metodo WorldRoot:Raycast() (Workspace:Raycast()) da un'origine Vector3 in una direzione Vector3.

Raycast di Base

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 applicabile, puoi calcolare un vettore direzionale sconosciuto (rayDirection) usando un origine e un destinazione note. Questo è utile quando emetti un raggio tra due punti che possono cambiare, come da un personaggio giocatore a un altro.

  1. L'origine più un vettore direzionale indicano la destinazione del raggio:

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

  2. Sottrai rayOrigin\text{rayOrigin} da entrambi i lati dell'equazione:

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

  3. La direzione del raggio è pari alla destinazione meno l'origine:

    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)

Opzioni di filtro

WorldRoot:Raycast() accetta un oggetto RaycastParams opzionale che dice al raycast di includere o escludere selettivamente certi BaseParts, ignorare il materiale Acqua per Terrain, o utilizzare un gruppo di collisione.

ChiaveDescrizione
FilterDescendantsInstancesArray di oggetti i cui discendenti vengono utilizzati per filtrare i candidati al raycasting.
FilterTypeEnum Enum.RaycastFilterType che determina come viene utilizzato l'array FilterDescendantsInstances nell'operazione di raycast.
  • Exclude — Ogni BasePart è considerato eccetto quelli che sono discendenti di oggetti nell'array.
  • Include — Solo BaseParts che sono discendenti di oggetti nell'array sono considerati.
IgnoreWaterBooleano che determina se il materiale Acqua è considerato durante il raycasting contro Terrain.
CollisionGroupNome stringa del gruppo di collisione utilizzato per l'operazione di raycasting.
Filtraggio del 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)

Rilevamento collisioni

Se l'operazione di raycasting colpisce un BasePart o una cella di Terrain idonea, viene restituito un oggetto RaycastResult contenente i risultati. Per verificare un colpo, conferma che il risultato non sia nil e utilizza le seguenti proprietà se necessario.

ProprietàDescrizione
InstanceIl BasePart o la cella di Terrain che il raggio ha intersecato.
PositionPosizione Vector3 dell'intersezione tra il raggio e il Instance.
DistanceDistanza tra l'origine del raggio e il punto di intersezione.
MaterialIl Enum.Material del BasePart o di Terrain al punto di intersezione.
NormalVector3 del vettore normale della faccia intersecata.
Rilevamento del Colpo del 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("Istanza:", raycastResult.Instance)
print("Posizione:", raycastResult.Position)
print("Distanza:", raycastResult.Distance)
print("Materiale:", raycastResult.Material)
print("Normale:", raycastResult.Normal)
else
warn("Nessun risultato del raycast!")
end
© 2026 Roblox Corporation. Roblox, il logo Roblox e Powering Imagination sono tra i nostri marchi registrati e non registrati negli Stati Uniti. e altri paesi.