Strahlenwerfen

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

Mit seiner grundlegendsten Stufeist Raycasting die Handlung, einen unsichtbaren Strahl von einem Vector3-Punkt in eine bestimmte Richtung mit einer definierten Länge zu senden. Einmal cast, können Sie erkennen, ob der Strahl einen BasePart oder 1> Class.Terrain1>-Zell berührt.

Laser werden durch schwebende Kugeln abgefeuert, und Raycasting bestimmt, ob ein Laser eine Plattform trifft. Berührte Plattformen werden temporär zerstört.

Schienenwerfen

Sie können einen Strahl mit der Methode WorldRoot:Raycast() aus einer Class.WorldRoot:Raycast() -Zeile in einer Class.WorldRoot:Raycast() -Richtung abgeben.

Einfacher Raycast

local rayOrigin = Vector3.new(0, 0, 0)
local rayDirection = Vector3.new(0, -100, 0)
local raycastResult = workspace:Raycast(rayOrigin, rayDirection)

Filtern

Class.WorldRoot:Raycast() nimmt ein optionales RaycastParams -Objekt auf, das den Raycast auffordert, bestimmte BaseParts , unabhängig von ihrem 0>Wasser0> -Material für WorldRoot:Raycast()3> oder mit einem 6>Kollisions群

SchlüsselBeschreibung
FilterDescendantsInstancesArray von Objekten, deren Nachkommen in der Filterung von Kandidaten für Raycasting verwendet werden.
FilterTypeEnum.RaycastFilterTypeenum, das bestimmt, wie dieFilterDescendantsInstancesarray wird in der raycast-operation verwendet.
  • Exclude — Jeder BasePart ist als außer jenen, die Nachkommen von Objekten in der Arraysind.
  • Include — Nur BaseParts, die Nachkommen von Objekten in der Matrix sind.
IgnoreWaterBoolean, der bestimmt, ob das Material Wasser beim Raycasting gegen Terrain berücksichtigt wird.
CollisionGroupString-Name der Kollisionsgruppe, die für die Raycasting-Operation verwendet wird.
Raycast-Filterung

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)

Berechnung der Richtung

Wenn geltend, können Sie einen unbekannten Richtungsvektor ( rayDirection ) mit einem bekannter Herkunft und Ziel berechnen. Dies ist nützlich, wenn Sie einen Strahl zwischen zwei Punkten, die ändern können, wie von einem Spielercharakter zu einem anderen, casten.

  1. Die Quelle plus ein Richtungsvektor zeigt die Zielrichtung des Strahls:

    rayOrigin + rayDirection = rayDestination

  2. Subtrahieren Sie RayOrigin von beiden Seiten der Gleichung:

    rayOrigin + rayDirectionrayOrigin = 0> rayDestination0> + 3> rayOrigin3>

  3. Die Richtung des Strahls entspricht dem Ziel minus der Quelle:

    rayDirection = rayDestinationrayOrigin


local rayOrigin = workspace.TestOrigin.Position
local rayDestination = workspace.TestDestination.Position
local rayDirection = rayDestination - rayOrigin
local raycastResult = workspace:Raycast(rayOrigin, rayDirection)

Treffer erkennen

Wenn die Raycasting-Operation ein elegibles BasePart oder Terrain-Zelle trifft, wird ein 2> Datatype.RaycastResult2> -Objekt mit den Ergebnissen zurückgegeben, die enthalten sind. Um einen Treffer zu testen, stellen Sie sicher, dass das Ergebnis nicht 5> nil5> ist und verwenden Sie die folg

EigenschaftBeschreibung
InstanceDie BasePart oder Terrain Zelle, in der der Strahl kreuzte.
PositionVector3 Position der Intersektion zwischen dem Strahl und dem Instance .
DistanceEntfernung zwischen der Ray-Origin und dem Intersection-Punkt.
MaterialDie Enum.Material des BasePart oder Terrain an der Intersektionsstelle.
NormalVector3 des normalen Vektors des verbundenen Gesichts.
Raycast-Treffer-Entdeckung

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