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.
Einfache Strahlenverfolgunglocal 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.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal 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. |
Strahlenverfolgungsfilterunglocal 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)
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. |
Strahlenverfolgung Treffererkennunglocal 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("Kein Strahlenverfolgungsergebnis!")end