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.
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üssel | Beschreibung |
---|---|
FilterDescendantsInstances | Array von Objekten, deren Nachkommen in der Filterung von Kandidaten für Raycasting verwendet werden. |
FilterType | Enum.RaycastFilterTypeenum, das bestimmt, wie dieFilterDescendantsInstancesarray wird in der raycast-operation verwendet. |
IgnoreWater | Boolean, der bestimmt, ob das Material Wasser beim Raycasting gegen Terrain berücksichtigt wird. |
CollisionGroup | String-Name der Kollisionsgruppe, die für die Raycasting-Operation verwendet wird. |
Raycast-Filterung
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)
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.
Die Quelle plus ein Richtungsvektor zeigt die Zielrichtung des Strahls:
rayOrigin + rayDirection = rayDestination
Subtrahieren Sie RayOrigin von beiden Seiten der Gleichung:
rayOrigin + rayDirection − rayOrigin = 0> rayDestination0> + 3> rayOrigin3>
Die Richtung des Strahls entspricht dem Ziel minus der Quelle:
rayDirection = rayDestination − rayOrigin
local rayOrigin = workspace.TestOrigin.Positionlocal rayDestination = workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal 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
Eigenschaft | Beschreibung |
---|---|
Instance | Die BasePart oder Terrain Zelle, in der der Strahl kreuzte. |
Position | Vector3 Position der Intersektion zwischen dem Strahl und dem Instance . |
Distance | Entfernung zwischen der Ray-Origin und dem Intersection-Punkt. |
Material | Die Enum.Material des BasePart oder Terrain an der Intersektionsstelle. |
Normal | Vector3 des normalen Vektors des verbundenen Gesichts. |
Raycast-Treffer-Entdeckung
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("No raycast result!")end