WorldRoot
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
Diese Basisklasse bietet eine API für jede Instanz, die für die Bearbeitung 3D-räumlicher Anfragen und Simulation gedacht ist, wie Workspace und WorldModel.
Zusammenfassung
Eigenschaften
Eigenschaften von Model übernommenLegt das Detaillevel auf dem Modell für Erlebnisse mit aktiviertem Instanzstreaming fest.
Steuert das Modellstreamingverhalten auf Models, wenn Instanzstreaming aktiviert ist.
Der primäre Teil des Model , oder nil wenn nicht explizit festgelegt.
Eigenschaft nur für den Editor, mit der das Modell um seinen Pivot herum skaliert wird. Das Festlegen dieser Eigenschaft bewegt die Skalierung, als ob Model/ScaleTo aufgerufen wurde.
Bestimmt, wo sich der Pivot eines , der keine festgelegte hat, befindet.
Methoden
Gibt wahr zurück, wenn einer der angegebenen BasePart irgendwelche andere Teile berührt.
Gibt eine Blockform in einer bestimmten Richtung aus und gibt eine RaycastResult zurück, wenn die Form eine BasePart oder Terrain Zelle trifft.
Bewegt eine Tabelle von BaseParts zu einer Tabelle von CFrames.
Gibt eine Reihe von Teilen zurück, deren Bindungsboxen eine bestimmte Auswahlboxüberlappen.
Gibt eine Reihe von Teilen zurück, deren Bindungsboxen eine gegebene Kugel überlappen.
Gibt eine Reihe von Teilen zurück, deren besetzter Raum mit dem angegebenen Teil geteilt wird.
- IKMoveTo(part : BasePart,target : CFrame,translateStiffness : number,rotateStiffness : number,collisionsMode : Enum.IKCollisionsMode):()
Bewegt das angegebene Teil durch die umgekehrte Kinematik an den angegebenen Ort, anstatt es direkt dorthin zu bewegen, um sicherzustellen, dass alle Gelenke, Einschränkungen oder Kollisionen, an denen das Teil teilnimmt, physisch zufrieden sind.
Wirft einen Strahl mit einer Herkunft, Richtung und optionalen RaycastParams zurück, dann gibt er einen RaycastResult zurück, wenn ein geeignetes Objekt oder Terrain den Strahl kreuzt.
- Spherecast(position : Vector3,radius : number,direction : Vector3,params : RaycastParams):RaycastResult?
Wirft eine kugelförmige Form in eine bestimmte Richtung und gibt eine RaycastResult zurück, wenn die Form eine BasePart oder Terrain Zelle trifft.
Fordert die Simulation für Teile in der Welt vorwärts basierend auf einem angegebenen Zeitincrement und einer optionalen Reihe von BaseParts.
Setzt dieses Modell für den angegebenen Spieler dauerhaft. ModelStreamingMode muss auf PersistentPerPlayer gesetzt werden, damit sich das Verhalten ändert, als Ergebnis der Ergänzung.
Gibt eine Beschreibung eines Volumens zurück, das alle Teile eines Modells enthält.
Gibt die Größe der kleinsten Bindungsbox zurück, die alle BaseParts in der Model enthält, ausgerichtet auf die Model.PrimaryPart, wenn sie festgelegt ist.
Gibt alle Player Objekte zurück, für die dieses Modellobjekt persistent ist.Das Verhalten unterscheidet sich je nachdem, ob diese Methode von einem Script oder einem LocalScript aufgerufen wird.
Gibt die kanonische Skala des Modells zurück, die standardmäßig auf 1 für neu erstellte Modelle gesetzt wird und sich ändern wird, wenn sie über Model/ScaleTo skaliert wird.
Bewegt den PrimaryPart an die angegebene Position. Wenn kein primärer Teil angegeben wurde, wird der Wurzelteil des Modells verwendet.
Macht dieses Modell für den angegebenen Spieler nicht mehr persistent.ModelStreamingMode muss auf PersistentPerPlayer gesetzt werden, damit sich das Verhalten ändert, als Ergebnis der Entfernung.
Legt den Skalierungsfaktor des Modells fest, passt die Größe und den Standort aller Nachkommen-Instanzen an, sodass sie diesen Skalierungsfaktor im Verhältnis zu ihrer ursprünglichen Größe und ihrem Standort haben, als der Skalierungsfaktor 1 war.
Verschiebt eine Model durch den angegebenen Vector3 Offset, wobei die Orientierung des Modells beibehalten wird.Wenn ein anderes BasePart oder Terrain bereits an der neuen Position existiert, wird der Model das zugeordnete Objekt überschreiben.
Holt den Pivot eines PVInstance .
Verwandelt die PVInstance zusammen mit all ihren Nachkommen PVInstances, so dass der Pivot jetzt an der angegebenen CFrame position ist.
Eigenschaften
Methoden
ArePartsTouchingOthers
Sind Teile berühren andere gibt wahr zurück, wenn mindestens einer der angegebenen BasePart andere Teile berührt.Zwei Teile gelten als "berührend", wenn sie innerhalb der Abstandsschwelle sind, overlapIgnored .
Wenn keine Teile bereitgestellt werden, wird false zurückgegeben.
Parameter
Eine Liste von Teilprüfungen, um zu sehen, ob Teile in der Liste irgendwelche Teile berühren, die nicht in der Liste sind.
Die Teilüberschneidungsgrenze in Studs, die ignoriert wird, bevor Teile als berührend angesehen werden.
Rückgaben
Code-Beispiele
The code block below demonstrates how to use WorldRoot:ArePartsTouchingOthers() to check if parts in a list are touching any parts in the workspace not in the list.
First the script creates two square parts that overlap 1 stud, Part1 and Part2. Then, it prints the value returned by ArePartsTouchingOthers() when Part1 is passed in partList at three different overlap values: 0, 0.999, and 1. The first two times ArePartsTouchingOthers() is called return false because the overlap values are less than the distance that Part1 and Part2 overlap. The third call returns true because the overlap value is equal to the distance that the parts overlap.
local part1 = Instance.new("Part")
part1.Name = "Part1"
part1.Anchored = true
part1.Transparency = 0.5
part1.Color = Color3.fromRGB(185, 100, 38)
part1.Size = Vector3.new(2, 2, 2)
part1.Position = Vector3.new(0, 4, 0)
part1.Parent = workspace
local part2 = Instance.new("Part")
part2.Name = "Part2"
part2.Anchored = true
part2.Transparency = 0.5
part2.Color = Color3.fromRGB(200, 10, 0)
part2.Size = Vector3.new(2, 2, 2)
part2.Position = Vector3.new(0, 5, 0)
part2.Parent = workspace
local partList = { part1 }
print(workspace:ArePartsTouchingOthers(partList, 0)) -- True
print(workspace:ArePartsTouchingOthers(partList, 0.999)) -- True
print(workspace:ArePartsTouchingOthers(partList, 1)) -- False
Blockcast
Wirft eine Blockform in eine bestimmte Richtung und gibt die erste Kollision mit einer BasePart oder Terrain Zelle zurück.Dies entspricht der Art und Weise, wie WorldRoot:Raycast() einen linearen Strahl in eine Richtung wirft, um eine Kollision zu finden, aber er verwendet eine 3D-Form statt eines Strahls.
Im Gegensatz zu WorldRoot:GetPartsInPart() erkennt diese Methode nicht BaseParts, dass zunächst die Form überschneidet.
Wenn ein Treffer erkannt wird, wird ein RaycastResult zurückgegeben, der die Trefferinformationen enthält.Die Eigenschaft Distance repräsentiert die Entfernung, die die Form zurücklegen muss, um einen Treffer zu finden, und die Eigenschaft Position repräsentiert den Knotenpunkt, der den Treffer verursacht.
Diese Methode wirft einen Fehler, wenn sie ungültige CFrame , Größen- oder Richtungs输入 übergeben wird.
Parameter
Die ursprüngliche Position und Drehung der Gießblockform.
Die Größe des Gussblockformats in Studs. Die maximale Größe beträgt 512 Studs.
Richtung des Shapecasts, mit der Größe, die die maximale Entfernung darstellt, die die Form zurücklegen kann. Die maximale Entfernung beträgt 1024 Klötze.
Rückgaben
Code-Beispiele
Casts a block and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castBlock()
-- The initial position and rotation of the cast block shape
local originCFrame = CFrame.new(Vector3.new(0, 50, 0))
-- The size of the cast block shape
local size = Vector3.new(6, 3, 9)
-- The direction the block is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the block and create a visualization of it
local raycastResult = Workspace:Blockcast(originCFrame, size, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Block intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between block's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a block every 2 seconds
while true do
castBlock()
task.wait(2)
end
BulkMoveTo
Diese Funktion bewegt eine Tabelle von BaseParts zu einer Tabelle von CFrames ohne notwendigerweise die Standard-Ereignisse Changed zu aktivieren.Dies bietet einen sehr schnellen Weg, um eine große Anzahl von Teilen zu bewegen, da Sie nicht die Kosten für einzelne Eigenschaftssätze für jedes einzelne Teil zahlen müssen.
Das dritte Argument ermöglicht es dir, die Bewegungsoperation weiter zu optimieren.Standardmäßig wird das Ereignis von jedem Teil für , und ausgelöst.Wenn du jedoch FireCFrameChanged als drittes Argument spezifizierst, wird nur das Changed-Ereignis für die CFrame-Eigenschaft initiieren.
Beachten Sie, dass Sie diese Funktion nur verwenden sollten, wenn Sie sicher sind, dass die Bewegung von Teilen ein Engpass in Ihrem Codesist.Die einfache Festlegung der CFrame Eigenschaft von einzelnen Teilen und verschweißten Modellen ist in der Mehrheit der Fälle schnell genug.
Parameter
Rückgaben
GetPartBoundsInBox
WorldRoot:GetPartBoundsInBox() gibt eine reihe von teilen zurück, deren grenzboxen eine box überschneiden, deren lautstärke mit dem angegebenen zentrum ( CFrame ) und größe ( Vector3 ) beschrieben wird.
Wie betont, berücksichtigt diese räumliche Abfragemethode effizient die Lautstärke der Bindungsboxen der Teile anstatt ihr tatsächliches besetztes Volumen.Dies kann bei der Betrachtung von Zylindern, Kugeln, Unionen und MeshParts, die keine Blockformen haben, wichtig sein.Für Fälle, in denen Genauigkeit besonders wichtig ist, verwende stattdessen WorldRoot:GetPartsInPart() oder filtere die Ergebnisse dieser Methode selbst weiter.
Diese Methode verwendet ein -Objekt, um wiederverwendbare Teile der räumlichen Abfragezu beschreiben, wie eine Inklusions- oder Ausschlussliste, die maximale Anzahl von Teilen, die Abfragewerden sollen, die zu verwendende Kollisionsgruppe und ob die Anfrage den Wert eines überschnittenen Teils über seinen Wert überschreitet.
Parameter
Der Standort des Zentrums des gegebenen Kistenvolumens, das abgefragt werden soll.
Die Größe des gegebenen Kistenvolumens, das abgefragt werden soll.
Enthält wiederverwendbare Teile der räumlichen Such参数.
Rückgaben
Ein Array von BaseParts, das der räumlichen Abfrageentsprach.
GetPartBoundsInRadius
WorldRoot:GetPartBoundsInRadius() gibt eine reihe von teilen zurück, deren bindungsboxen eine kugel überschneiden, deren volumen mit dem angegebenen zentrum ( Vector3 ) und radius beschrieben wird.
Wie betont, berücksichtigt diese räumliche Abfragemethode effizient die Lautstärke der Bindungsboxen der Teile anstatt ihr tatsächliches besetztes Volumen.Dies kann bei der Betrachtung von Zylindern, Kugeln, Unionen und MeshParts, die keine Blockformen haben, wichtig sein.Für Fälle, in denen Genauigkeit besonders wichtig ist, verwende stattdessen WorldRoot:GetPartsInPart() oder filtere die Ergebnisse dieser Methode selbst weiter.
Diese Methode verwendet ein -Objekt, um wiederverwendbare Teile der räumlichen Abfragezu beschreiben, wie eine Inklusions- oder Ausschlussliste, die maximale Anzahl von Teilen, die Abfragewerden sollen, die zu verwendende Kollisionsgruppe und ob die Anfrage den Wert eines überschnittenen Teils über seinen Wert überschreitet.
Parameter
Der Standort des Zentrums der angegebenen Kugelmenge, die abgefragt werden soll.
Der Radius des angegebenen Kugelvolumens, das abgefragt werden soll.
Enthält wiederverwendbare Teile der räumlichen Such参数.
Rückgaben
Ein Array von BaseParts, das der räumlichen Abfrageentsprach.
GetPartsInPart
WorldRoot:GetPartsInPart() gibt eine Reihe von Teilen zurück, deren besetzter Raum mit dem angegebenen Teil geteilt wird (die existieren muss im selben WorldRoot wie die zu abfragenden Teile).Diese Methode kann anstelle von BasePart:GetTouchingParts() verwendet werden und ist im Allgemeinen eine bessere Wahl.
Wie bereits erwähnt, berücksichtigt diese räumliche Abfragemethode die genaue Lautstärke , die vom angegebenen Teil mit einer vollständigen geometrischen überprüfenverwendet wird.Als Beispiel passt ein abgeflachtes/hohles Teil nicht zu abgefragten Teilen in ihm, es sei denn, es überlappt tatsächlich ein solches Teil oder berührt es.Für einfachere Volumen, erwägen Sie die Verwendung von WorldRoot:GetPartBoundsInBox() oder WorldRoot:GetPartBoundsInRadius(), da sie weniger genau sind, aber effizienter arbeiten.
Diese Methode verwendet ein -Objekt, um wiederverwendbare Teile der räumlichen Abfragezu beschreiben, wie eine Inklusions- oder Ausschlussliste, die maximale Anzahl von Teilen, die Abfragewerden sollen, die zu verwendende Kollisionsgruppe und ob die Anfrage den Wert eines überschnittenen Teils über seinen Wert überschreitet.
Parameter
Das Teil, dessen Lautstärke gegen andere Teile überprüft werden soll.
Enthält wiederverwendbare Teile der räumlichen Such参数.
Rückgaben
Ein Array von BaseParts, das der räumlichen Abfrageentsprach.
IKMoveTo
Diese Funktion bewegt das angegebene Teil an die angegebene Stelle via umgekehrte Kinematik, anstatt es direkt dorthin zu bewegen, um sicherzustellen, dass alle Gelenke, constraints oder Kollisionen, an denen das Teil teilnimmt, physisch zufrieden bleiben.Derzeit ist diese Funktion nur in Studio verfügbar bis plugins, da sie derzeit mit der Physik eines laufenden Spiels kollidiert.
Starrigkeit übersetzen ist eine Zahl zwischen 0 und 1, die angibt, wie aggressiv die Position des Teils mit der Position des Ziels-CFrame abgestimmt werden soll. Die Steifigkeit drehen ist eine Zahl zwischen 0 und 1, die angibt, wie aggressiv die Rotation des Teils mit der Rotation des Ziels-CFRames abgestimmt werden soll.
Zum Beispiel:
- Wenn die Übersetzungssteifigkeit und die Rotationssteifigkeit beide gleich 1 sind, wird das Teil genau auf die Ziel-CFRame verschoben, unabhängig davon, welche physischen Einschränkungen es gibt.
- Wenn die Übersetzungssteifigkeit und die Rotationssteifigkeit beide gleich 0,5 sind, versucht das Teil, sich genau auf die Ziel-CFRame zu bewegen, aber es wird durch physische Einschränkungen daran gehindert.
- Wenn die Übersetzungssteifigkeit und die Rotationssteifigkeit beide gleich 0 sind, wird der Ziel-CFRame ignoriert und die physischen Einschränkungen für das Objekt an der Stelle gelöst, an der es sich befand.
Parameter
Das zu bewegende Teil.
Der Ort, an den das angegebene Teil verschoben werden soll.
Eine Zahl zwischen 0 und 1, die angibt, wie aggressiv die Position des Teils zum Zielteil passt CFrame .
Eine Zahl zwischen 0 und 1, die angibt, wie aggressiv die Rotation des Teils mit der Rotationspart des Ziels übereinstimmt CFrame.
Ermöglicht es dir, anzugeben, welche Objekte durch die physische Auflösung beeinflusst werden sollen.
Rückgaben
Raycast
Wirft einen Strahl mit einer Herkunft, Richtung und optionalen RaycastParams aus.Wenn es eine berechtigte BasePart oder Terrain Zelle findet, wird eine RaycastResult zurückgegeben, die die Ergebnisse der Operation enthält.Wenn kein RaycastParams-Objekt bereitgestellt wird, werden die Standardwerte verwendet (alle Teile werden berücksichtigt und Terrain Wasser wird nicht ignoriert).
Beachten Sie, dass die Länge (Größe) des richtungsweisenden Vektors wichtig ist, da Objekte/Terrain weiter entfernt als ihre Länge nicht getestet werden.Wenn du ein CFrame verwendest, um die Strahlkomponenten zu erstellen, erwäge die Verwendung von CFrame.LookVector als richtungsvektor und multipliziere ihn mit der gewünschten Länge, wie im folgenden Beispiel gezeigt.Die maximale Länge des Richtungsvektors beträgt 15.000 Stollen.
Diese Methode verwendet nicht ein Ray Objekt, aber ihre Herkunfts- und Richtungsanteile können von Ray.Origin und Ray.Direction ausgeliehen werden.
Parameter
Der Ursprungspunkt des Strahls.
Der richtungsvektor des Strahls. Beachten Sie, dass die Länge dieses Vektors wichtig ist, da Teile/Terrain weiter entfernt als seine Länge nicht getestet werden.
Ein Objekt, das zur Spezifizierung der Trefferelegibilität in der Raycast-Operation verwendet wird.Wenn nicht bereitgestellt, werden Standardwerte verwendet, wenn alle Teile betrachtet werden und Terrain Wasser nicht ignoriert wird.
Rückgaben
Code-Beispiele
Casts a ray and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castRay()
-- The origin point of the ray
local originPosition = Vector3.new(0, 50, 0)
-- The direction the ray is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the ray
local distance = 50
-- Cast the ray and create a visualization of it
local raycastResult = Workspace:Raycast(originPosition, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Ray intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between ray origin and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a ray every 2 seconds
while true do
castRay()
task.wait(2)
end
Shapecast
Parameter
Rückgaben
Spherecast
Wirft eine kugelförmige Form in eine bestimmte Richtung und gibt die erste Kollision mit einer BasePart oder Terrain Zelle zurück.Dies entspricht der Art und Weise, wie WorldRoot:Raycast() einen linearen Strahl in eine Richtung wirft, um eine Kollision zu finden, aber er verwendet eine 3D-Form statt eines Strahls.
Im Gegensatz zu WorldRoot:GetPartsInPart() erkennt diese Methode nicht BaseParts, dass zunächst die Form überschneidet.
Wenn ein Treffer erkannt wird, wird ein RaycastResult zurückgegeben, der die Trefferinformationen enthält.Die Eigenschaft Distance repräsentiert die Entfernung, die die Form zurücklegen muss, um einen Treffer zu finden, und die Eigenschaft Position repräsentiert den Knotenpunkt, der den Treffer verursacht.
Diese Methode wirft einen Fehler, wenn ungültige Radius- oder Richtungseingaben übergeben werden.
Parameter
Die ursprüngliche Position der geschweiften kugelförmigen Form.
Der Radius der gegossenen kugelförmigen Form in Stollen. Der maximale Radius beträgt 256 Stollen.
Richtung des Shapecasts, mit der Größe, die die maximale Entfernung darstellt, die die Form zurücklegen kann. Die maximale Entfernung beträgt 1024 Klötze.
Rückgaben
Code-Beispiele
Casts a sphere and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castSphere()
-- The initial position of the cast spherical shape
local originPosition = Vector3.new(0, 50, 0)
-- The radius of the cast spherical shape in studs
local radius = 10
-- The direction the sphere is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the sphere and create a visualization of it
local raycastResult = Workspace:Spherecast(originPosition, radius, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Sphere intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between sphere's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a sphere every 2 seconds
while true do
castSphere()
task.wait(2)
end
StepPhysics
Fordert die Simulation für Teile in der Welt vorwärts basierend auf einem angegebenen Zeitincrement und einer optionalen Reihe von BasePart.Wenn eine Reihe von Teilen angegeben wird, werden nur diese Teile simuliert und alle anderen Teile in der Welt als verankert behandelt.Wenn dieses Argument ausgelassen wird, werden alle Teile der Welt in die Simulation aufgenommen.Der angegebene Zeitincrement kann eine positive Zahl sein, wobei größere Werte die Laufzeit der Funktion erhöhen.Abhängig vom Wert des Zeitinkrements kann das physikalische System es in mehrere einzelne Schritte unterteilen, um die Genauigkeit und Stabilität der Simulation zu gewährleisten.Selbst wenn die Funktion mehrere Substufen ausführt, werden die Ergebnisse der Simulation erst gesehen, wenn die Funktion abgeschlossen ist.Um die einzelnen Schritte einer Simulation visuell darzustellen, kann die Funktion einmal pro RenderSchritt über das Ereignis RunService.RenderStepped aufgerufen werden.
Parameter
Die Menge der Zeit, die simuliert wird. Dieses Argument muss eine positive Zahl sein. Größere Werte erhöhen die Laufzeit dieser Funktion.
Optionales Array von Teilen, die simuliert werden. Dieses Set muss Instanzen enthalten, die vom Typ BasePart sind; alle anderen Arten werden ignoriert.
Rückgaben
Code-Beispiele
Simulates the parts in the workspace for a fixed period of time by calling the StepPhysics function once per frame until a specified time has elaspsed.
local RunService = game:GetService("RunService")
-- Optional array of parts to simulate; otherwise all parts will be simulated
local partsToSimulate = {
workspace.Part,
}
local function simulateParts(duration)
local time = 0.0
local stepJob
stepJob = RunService.RenderStepped:Connect(function(dt)
if time + dt > duration then
dt = duration - time
end
workspace:StepPhysics(dt, partsToSimulate)
time = time + dt
if time >= duration then
stepJob:Disconnect()
end
end)
end
-- Simulate workspace parts for 5 seconds, stepping the parts once per frame
simulateParts(5.0)