Auf der grundlegendsten Ebene ist Strahlenverfolgung der Akt, einen unsichtbaren Strahl von einem Vector3 Punkt in eine bestimmte Richtung mit einer definierten Länge auszusenden. Sobald der Strahl ausgesendet wurde, können Sie überprüfen, ob der Strahl auf ein BasePart oder eine Terrain-Zelle trifft.
Sie können einen Strahl mit der Methode WorldRoot:Raycast() (Workspace:Raycast()) von einem Vector3-Ursprung in eine Vector3-Richtung auscasten.
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 zutreffend, können Sie einen unbekannten Richtungsvektor (rayDirection) unter Verwendung eines bekannten Ursprungs und Ziels berechnen. Dies ist nützlich, wenn Sie einen Strahl zwischen zwei Punkten auscasten, die sich ändern können, beispielsweise von einem Spielercharakter zum anderen.
Der Ursprung plus ein Richtungsvektor geben das Ziel des Strahls an:
Subtrahieren Sie von beiden Seiten der Gleichung:
Die Richtung des Strahls entspricht dem Ziel minus dem Ursprung:
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)Filteroptionen
WorldRoot:Raycast() akzeptiert ein optionelles RaycastParams-Objekt, das dem Strahlenverfolger mitteilt, dass bestimmte BaseParts ein- oder ausgeschlossen werden sollen, das Wasser-Material für Terrain ignoriert werden soll oder eine Kollisionsgruppe verwendet werden soll.
| Schlüssel | Beschreibung |
|---|---|
| FilterDescendantsInstances | Array von Objekten, deren Nachfahren bei der Filterung der Strahlenverfolgungs-Kandidaten verwendet werden. |
| FilterType | Enum.RaycastFilterType-Enum, das bestimmt, wie das FilterDescendantsInstances-Array in der Strahlenverfolgung verwendet wird. |
| IgnoreWater | Boolean, der bestimmt, ob das Wasser-Material bei der Strahlenverfolgung gegen Terrain berücksichtigt wird. |
| CollisionGroup | String-Name der Kollisionsgruppe, die für die Strahlenverfolgungsoperation verwendet wird. |
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)Treffererkennung
Wenn die Strahlenverfolgungsoperation auf ein berechtigtes BasePart oder eine Terrain-Zelle trifft, wird ein RaycastResult-Objekt zurückgegeben, das die Ergebnisse enthält. Um auf einen Treffer zu testen, stellen Sie sicher, dass das Ergebnis nicht nil ist, und verwenden Sie die folgenden Eigenschaften nach Bedarf.
| Eigenschaft | Beschreibung |
|---|---|
| Instance | Das BasePart oder die Terrain-Zelle, mit der der Strahl interagiert hat. |
| Position | Vector3-Position des Schnittpunkts zwischen dem Strahl und der Instance. |
| Distance | Abstand zwischen dem Strahlursprung und dem Schnittpunkt. |
| Material | Das Enum.Material des BasePart oder der Terrain am Schnittpunkt. |
| Normal | Vector3 des Normalenvektors der durchdrungenen Fläche. |
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("Instance:", raycastResult.Instance)
print("Position:", raycastResult.Position)
print("Distance:", raycastResult.Distance)
print("Material:", raycastResult.Material)
print("Normal:", raycastResult.Normal)
else
warn("Kein Strahlenverfolgungsergebnis!")
end