Strahlenverfolgung

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

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.

Laser werden von schwebenden Kugeln abgefeuert, und die Strahlenverfolgung bestimmt, ob ein Laser auf eine Plattform trifft. Plattformen, die von den Lasern berührt werden, werden vorübergehend zerstört.

Sie können einen Strahl mit der Methode WorldRoot:Raycast() (Workspace:Raycast()) von einem Vector3-Ursprung in eine Vector3-Richtung auscasten.

Einfache Strahlenverfolgung

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.

  1. Der Ursprung plus ein Richtungsvektor geben das Ziel des Strahls an:

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

  2. Subtrahieren Sie rayOrigin\text{rayOrigin} von beiden Seiten der Gleichung:

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

  3. Die Richtung des Strahls entspricht dem Ziel minus dem Ursprung:

    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)

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üsselBeschreibung
FilterDescendantsInstancesArray von Objekten, deren Nachfahren bei der Filterung der Strahlenverfolgungs-Kandidaten verwendet werden.
FilterTypeEnum.RaycastFilterType-Enum, das bestimmt, wie das FilterDescendantsInstances-Array in der Strahlenverfolgung verwendet wird.
  • Exclude — Jedes BasePart wird außer denen, die Nachfahren der Objekte im Array sind, berücksichtigt.
  • Include — Nur BaseParts, die Nachfahren von Objekten im Array sind, werden berücksichtigt.
IgnoreWaterBoolean, der bestimmt, ob das Wasser-Material bei der Strahlenverfolgung gegen Terrain berücksichtigt wird.
CollisionGroupString-Name der Kollisionsgruppe, die für die Strahlenverfolgungsoperation verwendet wird.
Strahlenverfolgungsfilterung

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.

EigenschaftBeschreibung
InstanceDas BasePart oder die Terrain-Zelle, mit der der Strahl interagiert hat.
PositionVector3-Position des Schnittpunkts zwischen dem Strahl und der Instance.
DistanceAbstand zwischen dem Strahlursprung und dem Schnittpunkt.
MaterialDas Enum.Material des BasePart oder der Terrain am Schnittpunkt.
NormalVector3 des Normalenvektors der durchdrungenen Fläche.
Strahlenverfolgung Treffererkennung

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
©2026 Roblox Corporation. Roblox, das Roblox-Logo und "Powering Imagination" gehören zu unseren eingetragenen und nicht eingetragenen Markenzeichen in den USA und anderen Ländern.