Auf seiner grundlegendsten Stufeist Raycasting der Akt, einen unsichtbaren Strahl von einem Vector3 Punkt in einer bestimmten Richtung mit einer definierten Länge zu senden.Sobald du gecastet bist, kannst du erkennen, ob der Strahl eine BasePart oder Terrain Zelle trifft.
Du kannst einen Strahl mit der Methode WorldRoot:Raycast() ( Workspace:Raycast() ) von einer Vector3 Herkunft in eine Vector3 Richtung abstrahlen.
Basisstrahlcast
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)
Wenn geltend, kannst du einen unbekannten richtungsvektor ( rayDirection ) berechnen, der mit einem bekannten herkunftspunkt und zielpunkt verwendet wird.Dies ist nützlich, wenn du einen Strahl zwischen zwei Punkten wirfst, die sich ändern können, wie von einem Spielercharakter zu einem anderen.
Die Herkunft plus ein richtungsweisender Vektor zeigen den Bestimmungsort des Strahls an:
rayOrigin + rayDirection = rayDestination
Subtrahiere rayOrigin von beiden Seiten der Gleichung:
rayOrigin + rayDirection − rayOrigin = rayDestination − rayOrigin
Die Richtung des Strahls entspricht der Destination minus der Herkunft:
Strahlrichtung = Strahlziel − Strahlherkunft
local Workspace = game:GetService("Workspace")local rayOrigin = Workspace.TestOrigin.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
Filteroptionen
WorldRoot:Raycast() akzeptiert ein optionales RaycastParams Objekt, das dem Raycast mitteilt, bestimmte BaseParts auszuschließen oder einzuschließen, ignoriert das Wasser Material für Terrain oder verwendet eine Kollisionsgruppe.
Schlave | Beschreibung |
---|---|
FilterDescendantsInstances | Array von objekten, deren nachkommen bei der filterung von raycasting-kandidaten verwendet werden |
FilterType | Enum.RaycastFilterType enum, das festlegt, wie die FilterDescendantsInstances matrix in der raycast-operation verwendet wird. |
IgnoreWater | Boolean, der bestimmt, ob das Wasser -Material beim Raycasting gegen Terrain berücksichtigt wird. |
CollisionGroup | Schnellname der Kollisionsgruppe, die für die Raycasting-Operation verwendet wird. |
Raycast-Filterung
local 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)
Zielerkennung
Wenn die Raycasting-Operation eine berechtigte BasePart oder Terrain Zelle trifft, wird ein RaycastResult Objekt zurückgegeben, das die Ergebnisse enthält.Um auf einen Treffer zu testen, bestätigen Sie, dass das Ergebnis nicht nil ist, und nutzen Sie die folgenden Eigenschaften, wie nötig.
Eigenschaft | Beschreibung |
---|---|
Instance | Die BasePart oder Terrain Zelle, die der Strahl gekreuzt hat. |
Position | Vector3 position der intersektion zwischen dem strahl und dem Instance. |
Distance | Entfernung zwischen dem Strahlursprung und dem Intersectionspunkt. |
Material | Die Enum.Material des BasePart oder Terrain am Schnittpunkt. |
Normal | Vector3 des normalen vektors des überschnittenen gesichts. |
Raycast-Hit-Erkennung
local Workspace = game:GetService("Workspace")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