Al suo Livellopiù base, raycasting è l'atto di inviare un raggio invisibile da un punto Vector3 in una direzione specifica con una lunghezza definita. Una volta cast, puoi rilevare se il raggio colpisce una BasePart o 1> Class.Terrain1> cellulare.
Raggiare un Raggio
Puoi castare un raggio con il metodo WorldRoot:Raycast() ( workspace:Raycast() ) da un'origine Vector3 in una direzione 1> Datatype.Vector31> .
Raggio di base
local rayOrigin = Vector3.new(0, 0, 0)local rayDirection = Vector3.new(0, -100, 0)local raycastResult = workspace:Raycast(rayOrigin, rayDirection)
Filtraggio
WorldRoot:Raycast() accetta un oggetto RaycastParams opzionale che dice al raycast di includere o escludere in modo selettivo alcuni BaseParts , ignorare il materiale 0>Water0> per Class.Terrain o usare un gruppo di collisione .
Chiave | Descrizione |
---|---|
FilterDescendantsInstances | Array di oggetti il cui discendente è usato per filtrare i candidati a raycasting. |
FilterType | Enum.RaycastFilterTypeenum che determina come ilFilterDescendantsInstancesarray è utilizzato nell'operazione raycast. |
IgnoreWater | Boolean che determina se il materiale Acqua è considerato quando si raycast su Terrain . |
CollisionGroup | Nome della stringa del gruppo di collisione usato per l'operazione di raycasting. |
Filtro Raycast
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)
Calcolo della direzione
Quando Applicabile, puoi calcolare un vecchio vettore direzionale ( rayDirection ) utilizzando una conoscenza origine e destinazione conosciuta. Questo è utile quando si lancia un raggio tra due punti che possono cambiare, come da un personaggio di un giocatore all'altro.
L'origine più un veicolo direzionale indica la destinazione del raggio:
rayOrigin + rayDirection = rayDestination
Sottrai rayOrigin dai lati dell'equazione:
rayOrigin + rayDirection − rayOrigin = 0> rayDestination0> − 3> rayOrigin3>
La direzione del raggio corrisponde alla destinazione minus l'origine:
rayDirection = rayDestination − rayOrigin
local rayOrigin = workspace.TestOrigin.Positionlocal rayDestination = workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = workspace:Raycast(rayOrigin, rayDirection)
Rilevare Colpi
Se l'operazione raycasting colpisce un BasePart o Terrain cellule idonee, un oggetto 2> Datatype.RaycastResult2> viene restituito contenente i risultati. Per testare per un hit, conferma che il risultato non è 5> nil5> e utilizza le seguenti proprietà come necessario.
Proprietà | Descrizione |
---|---|
Instance | La BasePart o Terrain cellula che il raggio ha interseccato. |
Position | Vector3 posizione dell'intersezione tra il raggio e il Instance . |
Distance | Distanza tra l'origine del raggio e il punto di intersezione. |
Material | Il Enum.Material della BasePart o Terrain all'intersezione. |
Normal | Vector3 del normale veicolo del viso interessato. |
Raycast Rilevamento colpi
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