WorldRoot

Veraltete anzeigen

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

Nicht erstellbar

Diese Basis-Klasse bietet eine API für jede Instanz, die 3D-Räumliche Anfragen und Simulation für jede Art von Anwendungsfall verwalten soll, wie z. B. Workspace und WorldModel.

Zusammenfassung

Eigenschaften

Eigenschaften von Model übernommen
  • Plugin-Sicherheit
    Parallel lesen

    Setzt die Detaillierungsstufe auf dem Modell für Erlebnisse mit eingeschaltetem Instanz- Streaming.

  • Steuert das Modell- Streaming-Verhalten auf Models, wenn das Instanz- Streaming aktiviert ist.

  • Parallel lesen

    Der Hauptteil des Model , oder nil wenn nicht explizit festlegen.

  • Nicht repliziert
    Nicht skriptfähig
    Parallel lesen

    Editor-only-Eigenschaft, die verwendet wird, um das Modell um seine Achse zu skalieren. Wenn Sie diese Eigenschaft einstellen, bewegt sich die Skala, als ob Model/ScaleTo auf sie aufgerufen wurde.

  • Nicht repliziert
    Parallel lesen

    Bestimmt, wo sich der Pivot eines Model , der nicht hat, befindet.

Eigenschaften von PVInstance übernommen

Methoden

Methoden von Model übernommen
  • AddPersistentPlayer(playerInstance : Player):void

    Setzt dieses Modell so ein, dass es für den angegebenen Spieler:indauerhaft ist. Model.ModelStreamingMode muss so eingestellt sein, dass PersistentPerPlayer für das Verhalten als Ergebnis der Zugabe geändert wird.

  • Bietet eine Beschreibung eines Volumes, das alle Teile eines Modells enthält.

  • Gibt die Größe der kleinsten Kernkiste zurück, die alle BaseParts in der Model enthält, mit dem Alignment auf die Model.PrimaryPart , wenn es festlegenist.

  • Rückgibt alle Player -Objekte, für die dieses Modell-Objekt persistent ist. Das Verhalten variiert basierend darauf, ob diese Methode aus einem Script oder einem LocalScript aufgerufen wird.

  • Gibt die Skalierung des Modells zurück, die standardmäßig 1 für neu erstellte Modelle beträgt und sich ändern wird, wenn sie über Model/ScaleTo skaliert wird.

  • MoveTo(position : Vector3):void

    Bewegt den PrimaryPart an die angegebene Position. Wenn eine Primärteil nicht angegeben wurde, wird die Wurzelteil des Modells verwendet.

  • RemovePersistentPlayer(playerInstance : Player):void

    Macht dieses Modell für bestimmten Spieler:innicht mehr persistent. Model.ModelStreamingMode muss auf PersistentPerPlayer eingestellt sein, damit das Verhalten als Ergebnis der Entfernung geändert wird.

  • ScaleTo(newScaleFactor : number):void

    Setzt den Skalierungsfaktor des Modells, um die Größe und den Standort aller Nachkommen zuzuschneiden, damit sie diesen Skalierungsfaktor in Relation zu ihren ursprünglichen Größen und Standorten haben, wenn der Skalierungsfaktor 1 war.

  • TranslateBy(delta : Vector3):void

    Verschiebt ein Model durch den angegebenen Vector3 Versatz, wobei die Orientierung des Modells erhalten bleibt. Wenn ein weiterer BasePart oder 2>Class.Terrain2> bereits in der neuen Position existiert, wird das 5>Class.Model5> mit dem überschriebenen 8>Class.Model8> kollidieren.

Methoden von PVInstance übernommen

Eigenschaften

Methoden

ArePartsTouchingOthers

ArePartsTouchingOthers gibt zurück, wenn mindestens ein der gegebenen BasePart berührt irgendeinen anderen Teil. Zwei Teile werden als "berührend" betrachtet, wenn sie innerhalb der Distanzschwelle sind, overlapIgnored.

Wenn keine Teile angegeben werden, wird false zurückgegeben.

Parameter

partList: Instances

Eine Liste von Teilen, die prüfen, ob ein Teil in der Liste irgendein Teil berührt, das nicht in der Liste ist.

overlapIgnored: number

Der Teilbereich-Schwellenwert in Studs, der ignoriert wird, bevor Teile berührt werden.

Standardwert: 0.000199999995

Rückgaben

True if and only if any of the parts in partList are touching any other parts (parts not in the partList). False if no parts are passed.

Code-Beispiele

Checking for Touching Parts

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

Parallel schreiben

Casts einen Block in einer bestimmten Richtung und gibt die erste Kollision mit einem BasePart oder Terrain-Zell ab. Dies ist ähnlich, wie WorldRoot:Raycast() einen linearen Strahl in eine Richtung kastiert, um eine Kollision zu finden, aber es verwendet eine 3D-Form anstelle eines Strahls.

Anders als WorldRoot:GetPartsInPart() , entdeckt diese Methode nicht BaseParts, die ursprünglich eine Form bildet.

Wenn ein Treffer erkannt wird, wird eine RaycastResult mit den Trefferinformationen zurückgegeben. Die Distance Eigenschaft repräsentiert die Distanz, die die Form zu finden muss, und die Position Eigenschaft repräsentiert den Interektionspunkt, der den Treffer verursacht.

Diese Methode gibt einen Fehler zurück, wenn sie ungültige CFrame , Größe oder Richtungseingaben erhalten hat.

Parameter

cframe: CFrame

Die anfängliche Position und Rotation des Cast-Blocks.

size: Vector3

Die Größe des Cast-Blocks in Studs. Die maximale Größe beträgt 512 Studs.

direction: Vector3

Richtung des Shapecast, mit der Größe, die die Form repräsentiert, die maximale Entfernung, die die Form reisen kann. Die maximale Entfernung beträgt 1024 Studs.

Standardwert: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Rückgaben

Enthält das Ergebnis der Shapecast-Operation oder nil , wenn keine eligiblen BasePart oder Terrain Zelle getroffen wurde.

Code-Beispiele

Blockcasting

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

void

Diese Funktion bewegt eine Tabelle von BaseParts zu einer Tabelle von CFrames ohne das Notwendige zu tun, um die Standard-Eigenschaft Changed aufzurufen. Dies bietet einen sehr schnellen Weg, um große Anzahl von Teilen zu bewegen, da Sie nicht die Kosten für separate Eigenschaftssätze für jed

Das dritte Argument ermöglicht es Ihnen, die Bewegungsoperation weiter zu optimieren. Standardmäßig wird das Ereignis Class.Object.Changed|Changed</

Beachten Sie, dass Sie diese Funktion nur verwenden sollten, wenn Sie sicher sind, dass die Bewegung der Teile ein Verbottungshemd in Ihrem Codesist. Einfach das Eigenschaft _ CFrame der einzelnen Teile und modellierten Modelle einzustellen, ist in den meisten Fällen schnell genug.

Parameter

partList: Instances
cframeList: Array
Standardwert: "FireAllEvents"

Rückgaben

void

GetPartBoundsInBox

Instances
Parallel schreiben

WorldRoot:GetPartBoundsInBox() gibt eine Reihe von Teilen zurück, deren Kistenkanten eine Box mit der Volumenbeschreibung mit dem angegebenen Center ( CFrame ) und Größe ( 0> Datatype.Vector30> ) übereinstimmt.

Wie betont, berücksichtigt dieser Raum-Abfrage-Prozess effizient die Volumen der Teile-Kontrollkisten, nicht aber ihre tatsächliche Volumen. Dies kann bei Zylindern, Kugeln, Verbindungen und MeshParts , bei denen nicht blockförmige Formen verwendet werden, wichtig sein. Für Fälle, in denen Genauigkeit besonders wichtig ist, verwenden Sie stattdessen Class.

Diese Methode verwendet ein OverlapParams -Objekt, um wiederverwendbare Teile der Abfragezu beschreiben, z. B. eine Inklusions- oder Ausklusionsliste, die maximale Anzahl von Teilen, die abgerufen werden sollen, und ob die Anfrage den Wert Collision-Gruppe über ihrem Wert Klassen-

Parameter

cframe: CFrame

Der Standort des Zentrums der angegebenen Box-Volumen, die abgerufen werden sollen.

size: Vector3

Die Größe des angegebenen Box-Volumens, die abgerufen wird.

overlapParams: OverlapParams

Enthält wiederverwendbare Teile der Raumzeit-Anfrage-Parameter.

Standardwert: "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Rückgaben

Instances

Ein Array von BaseParts , das die räumliche Abfrageerfüllte.

GetPartBoundsInRadius

Instances
Parallel schreiben

WorldRoot:GetPartBoundsInRadius() gibt eine Reihe von Teilen zurück, deren Kästen eine Kugel umgeben, deren Volumen mit dem angegebenen Center ( Vector3 ) und Radius (Number) beschrieben wird.

Wie betont, berücksichtigt dieser Raum-Abfrage-Prozess effizient die Volumen der Teile-Kontrollkisten, nicht aber ihre tatsächliche Volumen. Dies kann bei Zylindern, Kugeln, Verbindungen und MeshParts , bei denen nicht blockförmige Formen verwendet werden, wichtig sein. Für Fälle, in denen Genauigkeit besonders wichtig ist, verwenden Sie stattdessen Class.

Diese Methode verwendet ein OverlapParams -Objekt, um wiederverwendbare Teile der Abfragezu beschreiben, z. B. eine Inklusions- oder Ausklusionsliste, die maximale Anzahl von Teilen, die abgerufen werden sollen, und ob die Anfrage den Wert Collision-Gruppe über ihrem Wert Klassen-

Parameter

position: Vector3

Der Standort des Zentrums der angegebenen Kugelvolumen, die abgerufen werden sollen.

radius: number

Der Radius der angegebenen Kugelvolumen, die abgerufen werden sollen.

overlapParams: OverlapParams

Enthält wiederverwendbare Teile der Raumzeit-Anfrage-Parameter.

Standardwert: "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Rückgaben

Instances

Ein Array von BaseParts , das die räumliche Abfrageerfüllte.

GetPartsInPart

Instances
Parallel schreiben

WorldRoot:GetPartsInPart() gibt eine Reihe von Teilen zurück, deren besetzter Speicher mit dem besetzten Speicher der angegebenen Teil geteilt wird (was in der gleichen WorldRoot wie die zu querenden Teile sein muss). Dieser Method kann in der Platzierung von BasePart:GetTouchingParts() verwendet werden und ist in der Regel eine bessere Wahl.

Wie bemerkt, berücksichtigt diese Raum-Abfrage-Methode die genaue Lautstärke, die von der angegebenen Teil verwendet wird, indem sie einen vollständigen geometrischen überprüfenverwendet. Als Beispiel wird eine konvekt/hollow-Teil nicht mit queried-Teilen innerhalb von ihm übereinstimmen, wenn sie nicht tatsächlich überlappen/berüh

Diese Methode verwendet ein OverlapParams -Objekt, um wiederverwendbare Teile der Abfragezu beschreiben, z. B. eine Inklusions- oder Ausklusionsliste, die maximale Anzahl von Teilen, die abgerufen werden sollen, und ob die Anfrage den Wert Collision-Gruppe über ihrem Wert Klassen-

Parameter

part: BasePart

Der Teil, dessen Volumen gegen andere Teile überprüft werden soll.

overlapParams: OverlapParams

Enthält wiederverwendbare Teile der Raumzeit-Anfrage-Parameter.

Standardwert: "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Rückgaben

Instances

Ein Array von BaseParts , das die räumliche Abfrageerfüllte.

IKMoveTo

void
Plugin-Sicherheit

Diese Funktion bewegt die angegebene Teil an den angegebenen Ort via umgekehrte Kinematik , anstatt sie direkt zu verschieben, um sicherzustellen, dass alle Verbindungen, constraints oder Kollisionen, die an einer teilnehmen, physisch zufrieden bleiben. Derzeit ist diese Funktion nur in Studio verfügbar, um plugins , da sie derzeit mit der Physik eines

Translate Stiffness ist eine Zahl zwischen 0 und 1, die angeben, wie aggressiv das Teil zur Position des Ziels CFrame zuordnen soll. Drehen Stiffness ist eine Zahl zwischen 0 und 1, die angeben, wie aggressiv das Teil drehen soll.

Zum Beispiel:

  • Wenn die Zugfestigkeit und die Rotierung der Zugfestigkeit beide 1 betragen, wird das Teil exakt auf das Ziel CFrame verschoben, unabhängig von den physikalischen Einschränkungen.
  • Wenn die Zugfestigkeit und die Rotationszugfestigkeit auf beide 0,5 gleich sind, versucht die Teil sich genau zum Ziel CFrame zu bewegen, aber kann durch physische Einschränkungen auf dem Weg aus dem Weg gedrückt werden.
  • Wenn die Zugfestigkeit und die Rotierung der Zugfestigkeit beide 0 betragen, wird die Ziel-CFrame ignoriert und die physischen Einschränkungen für das Objekt in der Position, in der es sich befindet, gelöst.

Parameter

part: BasePart

Der Teil wird bewegt.

target: CFrame

Der Ort, an dem die angegebene Teil bewegt werden soll.

translateStiffness: number

Eine Zahl zwischen 0 und 1, die angeben, wie aggressiv die Position des Teils auf die Position des Ziels CFrame zu vergleichen ist.

Standardwert: 0.5
rotateStiffness: number

Eine Zahl zwischen 0 und 1, die angeben, wie aggressiv die Teil drehen ist, um die Rotationspart des Ziels CFrame .

Standardwert: 0.5
collisionsMode: Enum.IKCollisionsMode

Erlaubt es dir, zu bestimmen, welche Objekte durch die physische Auflösung beeinflusst werden sollen.

Standardwert: "OtherMechanismsAnchored"

Rückgaben

void
Parallel schreiben

Wirft einen Strahl mit einem Ursprung, einer Richtung und einer optionalen RaycastParams . Wenn es einen qualifizierten BasePart oder Terrain Zell findet, wird ein 1> Datatype.

Beachten Sie, dass die Länge (Magnitude) des direktionalen Vektors wichtig ist, da Objekte/Terrain weiter weg von seiner Länge nicht getestet werden. Wenn Sie einen CFrame verwenden, um die Ray-Komponenten zu erstellen, berücksichtigen Sie die Verwendung von CFrame.LookVector als direktional

Diese Methode verwendet kein Datatype.Ray -Objekt, aber seine Ornament- und Richtungskomponenten können von Ray und Ray.Origin ausgeliehen werden.

Parameter

origin: Vector3

Der Anfangspunkt des Strahls.

direction: Vector3

Der dreh-Vector des Rays. Beachten Sie, dass die Länge dieses Vectors wichtig ist, da Teile/Terrain weiter weg von seiner Länge nicht getestet werden.

raycastParams: RaycastParams

Ein Objekt, das die Zielbarkeit in der Raycast-Operation angeben wird. Wenn nicht angegeben, werden standardmäßige Werte verwendet, in denen alle Teile betrachtet werden und Terrain Wasser nicht ignoriert wird.

Standardwert: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Rückgaben

Enthält die Ergebnisse einer Raycast-Operation oder nil , wenn keine eligiblen BasePart oder Terrain Zelle getroffen wurde.

Code-Beispiele

Raycasting

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

part: BasePart
direction: Vector3
Standardwert: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Rückgaben

Spherecast

Parallel schreiben

Wirft eine kugelförmige Form in eine bestimmte Richtung und gibt die erste Kollision mit einem BasePart oder Terrain-Zell ab. Dies ist ähnlich, wie WorldRoot:Raycast() einen linearen Ray in einer Richtung findet, um eine Kollision zu finden, aber es verwendet eine 3D-Form anstelle eines Ray.

Anders als WorldRoot:GetPartsInPart() , entdeckt diese Methode nicht BaseParts, die ursprünglich eine Form bildet.

Wenn ein Treffer erkannt wird, wird eine RaycastResult mit den Trefferinformationen zurückgegeben. Die Distance Eigenschaft repräsentiert die Distanz, die die Form zu finden muss, und die Position Eigenschaft repräsentiert den Interektionspunkt, der den Treffer verursacht.

Diese Methode wirft einen Fehler ab, wenn sie ungültige Radius- oder Richtungseingaben überträgt.

Parameter

position: Vector3

Die ursprüngliche Position der cast spherical shape.

radius: number

Der Radius der cast spherical shape in Studs. Der maximale Radius beträgt 256 Studs.

direction: Vector3

Richtung des Shapecast, mit der Größe, die die Form repräsentiert, die maximale Entfernung, die die Form reisen kann. Die maximale Entfernung beträgt 1024 Studs.

Standardwert: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Rückgaben

Enthält das Ergebnis der Shapecast-Operation oder nil , wenn keine eligiblen BasePart oder Terrain Zelle getroffen wurde.

Code-Beispiele

Spherecasting

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

void
Plugin-Sicherheit

Voraussetzung für die Simulation von Teilen in der Welt ist ein bestimmter Zeitpunkt und ein optionales Set von

Parameter

dt: number

Die Menge der Zeit, die simuliert werden soll. Dieses Argument muss eine positive Zahl sein. Größere Werte erhöhen die Laufzeit dieser Funktion.

parts: Instances

Optionale Matrix von Teilen, die simuliert werden sollen. Dieses Set muss Instanzen enthalten, die von Typ BasePart sind; alle anderen Arten werden ignoriert.

Standardwert: "{}"

Rückgaben

void

Code-Beispiele

StepPhysics

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)

Ereignisse