Strahlencasting

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

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.

Laser werden von schwebenden Kugeln abgefeuert, und das Raycasting bestimmt, ob ein Laser eine Plattform trifft.Von den Lasern berührte Plattformen werden vorübergehend zerstört.

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.

  1. Die Herkunft plus ein richtungsweisender Vektor zeigen den Bestimmungsort des Strahls an:

    rayOrigin + rayDirection = rayDestination

  2. Subtrahiere rayOrigin von beiden Seiten der Gleichung:

    rayOrigin + rayDirectionrayOrigin = rayDestinationrayOrigin

  3. Die Richtung des Strahls entspricht der Destination minus der Herkunft:

    Strahlrichtung = StrahlzielStrahlherkunft


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 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.

SchlaveBeschreibung
FilterDescendantsInstancesArray von objekten, deren nachkommen bei der filterung von raycasting-kandidaten verwendet werden
FilterTypeEnum.RaycastFilterType enum, das festlegt, wie die FilterDescendantsInstances matrix in der raycast-operation verwendet wird.
  • Exclude — Jedes BasePart wird als außer betrachtet, die Nachkommen von Objekten in der Arraysind.
  • Include — Nur BaseParts werden als Nachkommen von Objekten in der Liste betrachtet.
IgnoreWaterBoolean, der bestimmt, ob das Wasser -Material beim Raycasting gegen Terrain berücksichtigt wird.
CollisionGroupSchnellname der Kollisionsgruppe, die für die Raycasting-Operation verwendet wird.
Raycast-Filterung

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)

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.

EigenschaftBeschreibung
InstanceDie BasePart oder Terrain Zelle, die der Strahl gekreuzt hat.
PositionVector3 position der intersektion zwischen dem strahl und dem Instance.
DistanceEntfernung zwischen dem Strahlursprung und dem Intersectionspunkt.
MaterialDie Enum.Material des BasePart oder Terrain am Schnittpunkt.
NormalVector3 des normalen vektors des überschnittenen gesichts.
Raycast-Hit-Erkennung

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("No raycast result!")
end