Model

Veraltete anzeigen

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

Modelle sind Container-Objekte, d. h. sie gruppieren Objekte zusammen.Sie werden am besten verwendet, um Sammlungen von BaseParts zu halten, und haben eine Reihe von Funktionen, die ihre Funktionalität erweitern.

Modelle sollen geometrische Gruppierungen darstellen.Wenn deine Gruppierung keine geometrische Interpretation hat, zum Beispiel eine Sammlung von Scripts, verwende stattdessen Folder.

Modelle, deren Bestandteile mit Gelenken verbunden sind (so dass sie sich bewegen oder durch Physiksimulation zerstört werden können) haben in der Regel ein PrimaryPart Set, da es festlegt, welches Teil innerhalb des Modells der Pivot und die Bindungsbox "folgen" wird, wenn sich das Modell bewegt.Statische Modelle, die an einem Ort bleiben, profitieren nicht von der Verfügbarkeit eines primären Teilsatzes.

Modelle haben eine breite Palette von Anwendungen, einschließlich Roblox-Spielercharaktere.Sie haben auch eine Reihe einzigartiger Verhaltensweisen, die es zu berücksichtigen gilt:

  • Wenn ein Humanoid und ein Part mit dem Namen Kopf in einem Modell übergeordnet sind, wird eine Namens-/Gesundheits-GUI über dem Modell angezeigt; siehe Charaktername/Gesundheitsanzeige für Details.
  • Wenn die Position eines Teils auf der Y -Achse den Wert Workspace.FallenPartsDestroyHeight trifft und es das letzte Objekt innerhalb einer Model war, wird auch das Modell zerstört.
  • Wenn er an einem Ort verwendet wird, bei dem Workspace.StreamingEnabled auf Wahr gesetzt ist, steuert der Wert von ModelStreamingMode verschiedene Verhaltensweisen darüber, wie das Modell und alle Nachkommen von Clients repliziert und/oder entfernt werden.Darüber hinaus wirkt sich der Wert von LevelOfDetail auf die Rendering des Modells aus.

Wie bei allen Instance Arten wird die Tatsache, dass ein Elternteil Model auf einen Client repliziert wird, nicht garantieren, dass alle seine Kinder repliziert werden.Dies ist besonders wichtig, wenn diese Instanzen von Code auf dem Client zugriffen werden, wie in einem LocalScript .Die Verwendung von ModelStreamingMode mit Werten wie Atomic kann sicherstellen, dass das gesamte Modell und alle seine Nachkommen vorhanden sind, wenn das zugeordnete Modell auf dem Client vorhanden ist, oder Sie können WaitForChild() verwenden, wenn Atomizität nicht gewünscht ist.

Code-Beispiele

The following sample includes a basic function that takes a table of objects and parents them into a new Model, returning that Model.

Basic Model Instantiation

local function groupObjects(objectTable)
local model = Instance.new("Model")
for _, object in pairs(objectTable) do
object.Parent = model
end
return model
end
local objects = {
Instance.new("Part"),
Instance.new("Part"),
}
groupObjects(objects)

Zusammenfassung

Eigenschaften

  • Plugin-Sicherheit
    Parallel lesen

    Legt das Detaillevel auf dem Modell für Erlebnisse mit aktiviertem Instanzstreaming fest.

  • Steuert das Modellstreamingverhalten auf Models, wenn Instanzstreaming aktiviert ist.

  • Parallel lesen

    Der primäre Teil des Model , oder nil wenn nicht explizit festgelegt.

  • Nicht repliziert
    Nicht skriptfähig
    Parallel lesen

    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.

  • Nicht repliziert
    Parallel lesen

    Bestimmt, wo sich der Pivot eines , der keine festgelegte hat, befindet.

Eigenschaften von PVInstance übernommen

Methoden

  • AddPersistentPlayer(playerInstance : Player):()

    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.

  • MoveTo(position : Vector3):()

    Bewegt den PrimaryPart an die angegebene Position. Wenn kein primärer Teil angegeben wurde, wird der Wurzelteil des Modells verwendet.

  • RemovePersistentPlayer(playerInstance : Player):()

    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.

  • ScaleTo(newScaleFactor : number):()

    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.

  • TranslateBy(delta : Vector3):()

    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.

Methoden von PVInstance übernommen

Eigenschaften

Plugin-Sicherheit
Parallel lesen

Legt das Detaillierungsgrad auf dem Modell für Erlebnisse mit aktiviertem Instanzstreaming fest.

Wenn auf StreamingMesh gesetzt, rendert ein niedrigere Auflösung "Imposter"-Mesh (farbig, grobes Netz, das alle Kinderteile des Modells umgibt) außerhalb des Streamingradius.

Wenn auf Disabled oder Automatic eingestellt, werden Netzwerke mit geringerer Auflösung nicht angezeigt.

ModelStreamingMode

Parallel lesen

Steuert, wie Models gestreamt werden, wenn Instanz streaming aktiviert ist.Verhalten hängt von der ausgewählten Enum ab.Hat keine Auswirkung, wenn Streaming nicht aktiviert ist.

Diese Eigenschaft sollte nur im Studio über das Eigenschaften-Fenster geändert werden, wenn Streaming aktiviert ist, oder in Scripts , aber nie in LocalScripts (dadurch kann sich unbestimmtes Verhalten ergeben).

PrimaryPart

Parallel lesen

Weist auf den primären Teil der Model .Der primäre Teil ist der BasePart, der als physische Referenz für den Pivot des Modells fungiert.Das heißt, wenn Teile innerhalb des Modells aufgrund einer physischen Simulation oder anderer Mittel verschoben werden, bewegt sich der Pivot im Einklang mit dem primären Teil.

Beachten Sie, dass Models nicht standardmäßig PrimaryPart festgelegt ist.Wenn du ein Modell erstellst, das von der Physik ausgeführt werden muss, solltest du diese Eigenschaft manuell in Studio oder innerhalb eines Skripts festlegen.Wenn der primäre Teil nicht festgelegt ist , bleibt der Pivot an der gleichen Stelle im Weltraum, auch wenn Teile innerhalb des Modells verschoben werden.

Beachten Sie auch, dass wenn diese Eigenschaft festgelegt wird, es sich um eine BasePart handeln muss, die ein Nachkomme des Modells ist.Wenn du versuchst, auf ein zu setzen, das kein Nachkomme des Modells ist, wird es auf diesen Teil festgelegt, aber während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt auf während der nächsten Simulationsschritt wird es zurückgesetzt, wenn du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versuchst du versetzt du versetzt du versetzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt duzt duzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt du setzt duzt duzt duzt du setzt duzt duzt duzt duzt duzt duzt du setzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt duzt

Die allgemeine Regel für Modelle ist, dass:

  • Modelle, deren Teile durch physische Verbindungen wie WeldConstraints oder Motor6Ds miteinander verbunden sind, sollten einen primären Teil haben.Zum Beispiel haben Roblox-Charaktermodelle ihre Model.PrimaryPart standardmäßig auf die HumanoidRootPart gesetzt.
  • Statische (normalerweise Anchored ) Modelle, die an einem Ort bleiben, es sei denn, ein Skript bewegt sie explizit, benötigen keine Model.PrimaryPart und neigen nicht dazu, von einem Set zu profitieren.

Code-Beispiele

This code sample creates and throws a dice model, then outputs whether it landed with the blue side facing up. If Model.PrimaryPart was not set, the pivot / bounding box of the dice would rotate, as the parts inside of it are physically simulated during the roll.

Throwing Dice

-- Create a dice model with two halves and attach them together
local diceModel = Instance.new("Model")
diceModel.Name = "ChanceCube"
local diceTop = Instance.new("Part")
diceTop.Size = Vector3.new(4, 2, 4)
diceTop.Position = Vector3.new(0, 1, 0)
diceTop.Color = Color3.new(0, 0, 1)
diceTop.Parent = diceModel
local diceBottom = diceTop:Clone()
diceBottom.Position = Vector3.new(0, -1, 0)
diceBottom.Color = Color3.new(1, 0, 0)
diceBottom.Parent = diceModel
local weld = Instance.new("WeldConstraint")
weld.Part0 = diceTop
weld.Part1 = diceBottom
weld.Parent = diceModel
-- Put the dice up in the air above the workspace origin (does not require a primary part)
diceModel.Parent = workspace
diceModel:PivotTo(CFrame.new(0, 10, 0))
-- Assign the primary part before physical simulation
-- Without this line, the script will always output the same thing and the bounding box of the model will not change orientation
diceModel.PrimaryPart = diceTop
-- Wait a bit before rolling the dice (let it settle onto the floor)
for i = 5, 1, -1 do
print("Rolling dice in...", i)
task.wait(1)
end
diceTop:ApplyAngularImpulse(Vector3.new(15000, 1000, 5000))
diceTop:ApplyImpulse(Vector3.new(0, 3000, 0))
task.wait(1)
-- Wait for the roll to complete
while diceTop.AssemblyLinearVelocity.Magnitude > 0.1 or diceTop.AssemblyAngularVelocity.Magnitude > 0.1 do
task.wait()
end
-- Get the dice orientation, impacted by the primary part
local orientation = diceModel:GetBoundingBox()
if orientation.YVector.Y > 0.5 then
print("It's the boy!")
else
print("It's his mother!")
end

Scale

Nicht repliziert
Nicht skriptfähig
Parallel lesen

Das Festlegen dieser Eigenschaft im Eigenschaften-Fenster skaliert das Modell so, als ob Model/ScaleTo aufgerufen wurde, und skaliert alle abstehenden Instanzen im Modell, wie Materialien, Bilder und die 3D-Geometrie von Teilen, so dass das Modell den angegebenen Skalierungsfaktor im Verhältnis zu seiner ursprünglichen Größe hat.

Diese Eigenschaft ist nur in Studio verfügbar und wird einen Fehler werfen, wenn sie in einem Script oder LocalScript verwendet wird.Model/ScaleTo und Model/GetScale sollten von Skripten verwendet werden.

WorldPivot

Nicht repliziert
Parallel lesen

Diese Eigenschaft bestimmt, wo sich der Pivot eines , der keine festgelegte hat, befindet.Wenn das einen hat, ist der Pivot der gleich dem Pivot dieser primären Teil, und diese Eigenschaft wird ignoriert.

Für ein neu erstelltes Model wird sein Pivot als Zentrum der Begrenzungskiste seiner Inhalte behandelt, bis die erste Zeit seine Model.WorldPivot festgelegt wird.Sobald der Weltpivot zum ersten Mal eingestellt ist, ist es unmöglich, dieses anfängliche Verhalten wiederherzustellen.

Am häufigsten wird das Modell mit den Studio-Tools oder mit Modellbewegungsfunktionen wie PVInstance:PivotTo() und Model:MoveTo() bewegt, was die Weltachse festlegen und somit dieses neue Modellverhalten beenden wird.

Der Zweck dieses Verhaltens besteht darin, Luau-Code einen sinnvollen Pivot zu ermöglichen, indem du ein neues Modell erstellst und ihm Objekte zuordnest, ohne die Notwendigkeit zu vermeiden, jedes Mal, wenn du ein Modell in Code erstellst, explizit Model.WorldPivot zu setzen.


local Workspace = game:GetService("Workspace")
local model = Instance.new("Model")
Workspace.BluePart.Parent = model
Workspace.RedPart.Parent = model
model.Parent = Workspace
print(model:GetPivot()) -- Currently equal to the center of the bounding box containing "BluePart" and "RedPart"
model:PivotTo(CFrame.new(0, 10, 0)) -- This works without needing to explicitly set "model.WorldPivot"

Code-Beispiele

This code sample shows a custom function for resetting the pivot of a model back to the center of that model's bounding box.

Reset Pivot

local function resetPivot(model)
local boundsCFrame = model:GetBoundingBox()
if model.PrimaryPart then
model.PrimaryPart.PivotOffset = model.PrimaryPart.CFrame:ToObjectSpace(boundsCFrame)
else
model.WorldPivot = boundsCFrame
end
end
resetPivot(script.Parent)

Methoden

AddPersistentPlayer

()

Setzt dieses Modell für den angegebenen Spieler persistent.Beständige Modelle bleiben für den Spieler unabhängig von Streaming-Einstellungen oder -bedingungen präsent.

ModelStreamingMode muss auf PersistentPerPlayer gesetzt werden, damit sich das verhalten ändert, als ergebnis der ergänzung.

Parameter

playerInstance: Player

Die Player, um dieses Modell dauerhaft zu machen.

Standardwert: ""

Rückgaben

()

GetBoundingBox

Diese Funktion gibt eine Beschreibung eines Volumens zurück, das alle BasePart Kinder innerhalb eines Model enthält.Die Orientierung der Lautstärke basiert auf der Orientierung des PrimaryPart und entspricht der Auswahlbox, die in Studio gerendert wird, wenn das Modell ausgewählt wird.Durch das Nachahmen des Verhaltens von Terrain:FillBlock() gibt es eine CFrame wieder, die das Zentrum dieser Bindungsbox darstellt, und eine Vector3, die ihre Größe darstellt.

Wenn es für das Modell keine PrimaryPart gibt, wird die Grenzbox auf die Weltachsen ausgerichtet.


local Workspace = game:GetService("Workspace")
local model = Workspace.Model
local part = Workspace.Part
local orientation, size = model:GetBoundingBox()
-- Größe und Position des Teils so ändern, dass es der Umrissbox des Modells entspricht
part.Size = size
part.CFrame = orientation

Rückgaben

Ein CFrame repräsentierend die Orientierung der Lautstärke, gefolgt von einem Vector3 repräsentierend der Größe der Lautstärke.

GetExtentsSize

Gibt die Größe der kleinsten Bindungsbox zurück, die alle BaseParts in der Model enthält.Wenn Model.PrimaryPart existiert, wird die Bindungsbox auf diesen Teil ausgerichtet.Wenn ein primärer Teil nicht festgelegt wurde, wählt die Funktion einen Teil im Modell aus, um die Bindungsbox auszurichten.Da die Auswahl dieses Teils nicht deterministisch ist, wird empfohlen, ein Model.PrimaryPart festzulegen, um konsistente Ergebnisse mit dieser Funktion zu erhalten.

Beachten Sie, dass diese Funktion nur die Größe der kleinsten Bindungsbox zurückgibt, und der Entwickler muss seine eigene Methode verwenden, um die Position der Bindungsbox zu erhalten.


Rückgaben

Die Vector3 Extensionsgröße des Model.

Code-Beispiele

The code sample below demonstrates how Model.GetExtentsSize can be used to get the size of the bounding box containing the parts.

Model GetExtentsSize

local model = Instance.new("Model")
model.Parent = workspace
local RNG = Random.new()
for _ = 1, 5 do
local part = Instance.new("Part")
part.Anchored = true
part.Size = Vector3.new(RNG:NextNumber(0.05, 5), RNG:NextNumber(0.05, 5), RNG:NextNumber(0.05, 5))
part.Parent = model
end
print(model:GetExtentsSize())

GetPersistentPlayers

Instances

Wenn diese Methode von einem Script aufgerufen wird, gibt sie alle Player Objekte zurück, für die dieses Modell persistent ist.Wenn von einem LocalScript aus aufgerufen, prüft diese Methode nur, ob dieses Modell für die LocalPlayer persistent ist.


Rückgaben

Instances

Eine Tabelle mit allen Player Objekten, für die dieses Modellobjekt persistent ist.

GetScale

Modelle enthalten einen dauerhaften kanonischen Skalierungsfaktor, der mit 1 für neu erstellte Modelle beginnt und sich ändert, wenn das Modell skaliert wird, indem Model/ScaleTo angerufen wird.Diese Funktion gibt den aktuellen kanonischen Skalierungsfaktor des Modells zurück.

Der aktuelle Skalierungsfaktor hat keinen direkten Einfluss auf die Größe von Instanzen unter dem Modell.Es wird zur Inhaltsautorisierung und Skriptausführung verwendet, um sich zu erinnern, wie das Modell im Vergleich zu seiner ursprünglichen Größe skaliert wurde.

Innerhalb einer bestimmten Sitzung wird das Modell die genauen ursprünglichen Größeninformationen der abstehenden Instanzen nach der ersten Model/ScaleTo Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anruf nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der Anrufe nach der Anrufe nach der ersten Anrufe nach der ersten Anrufe nach der Anrufe nach der ersten Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe der Anrufe der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach der Anrufe nach dem Anrufe nach dem Anrufe nach der Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anru nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anru nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anru nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach dem Anrufe nach demDas bedeutet, dass das Ausrufen von gefolgt von dir genau zurückgibt die ursprüngliche Konfiguration des Modells ohne schwebende Punktd drift.Die Vermeidung von Treiberschwankungen ist die Motivation, eine Skala Nach Funktion anstelle einer Skala durch Funktion zu haben.

Der Skalierungsfaktor wirkt sich auf das Verhalten des Motors in einer Weise aus: Der Skalierungsfaktor eines Modells wird auf gemeinsame Versätze von animations angewendet, die auf einem AnimationController unter diesem Modell gespielt werden, so dass animierte Rigs richtig Animationen wiedergeben, auch wenn sie skaliert werden.


Rückgaben

Der aktuelle kanonische Skalierungsfaktor des Modells.

Code-Beispiele

This code sample demonstrates substituting in a replacement for all the copies of a tree model using PivotTo and ScaleTo. The pivot and scale of the models are used as a reference ensuring that the relative sizes and locations of the replacement models match those of the originals.

Substituting in a replacement model using PivotTo and ScaleTo

local CollectionService = game:GetService("CollectionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Find all the models with the tag we want to replace
local items = CollectionService:GetTagged("Tree")
local newModel = ReplicatedStorage.FancyTreeReplacementModel
for _, item in items do
-- Make the new item and scale / position it where the old one was
local newItem = newModel:Clone()
newItem:ScaleTo(item:GetScale())
newItem:PivotTo(item:GetPivot())
-- Add the same tag to the replacement
CollectionService:AddTag(newItem, "Tree")
-- Delete the old item and parent the new one
newItem.Parent = item.Parent
item:Destroy()
end

MoveTo

()

Bewegt den PrimaryPart an die angegebene Position.Wenn ein primäres Teil nicht spezifiziert wurde, wird das Wurzelteil des Modells verwendet, aber das Wurzelteil ist nicht deterministisch und es wird empfohlen, dass Sie immer ein primäres Teil verwenden, wenn Sie MoveTo() verwenden.

Wenn es Hindernisse gibt, bei denen das Modell bewegt werden soll, wie z. B. Terrain oder andere BaseParts, wird das Modell vertikal nach oben verschoben, bis es nichts im Wege ist.Wenn dieses Verhalten nicht gewünscht ist, sollte stattdessen PVInstance:PivotTo() verwendet werden.

Beachten Sie, dass die Rotation nicht erhalten bleibt, wenn Sie ein Modell mit MoveTo() verschieben.Es wird empfohlen, entweder TranslateBy() oder PVInstance:PivotTo() zu verwenden, wenn die aktuelle Rotation des Modells erhalten bleiben muss.

Parameter

position: Vector3

Die Vector3 die Model wird verschoben zu.

Standardwert: ""

Rückgaben

()

Code-Beispiele

This sample demonstrates how Model:MoveTo avoids collisions.

A simple two part Model is created, and its PrimaryPart is set. An large obstruction part is placed next to it.

After 5 seconds Model:MoveTo is used to direct the model to move inside the obstruction part. However, as MoveTo will not move a model inside of an obstruction the Model is moved up on the Y axis and placed above the obstruction.

Model MoveTo

local START_POSITION = Vector3.new(-20, 10, 0)
local END_POSITION = Vector3.new(0, 10, 0)
local model = Instance.new("Model")
model.Parent = workspace
local part1 = Instance.new("Part")
part1.Size = Vector3.new(4, 4, 4)
part1.Position = START_POSITION
part1.Anchored = true
part1.BrickColor = BrickColor.new("Bright yellow")
part1.Parent = model
local part2 = Instance.new("Part")
part2.Size = Vector3.new(2, 2, 2)
part2.Position = START_POSITION + Vector3.new(0, 3, 0)
part2.Anchored = true
part2.BrickColor = BrickColor.new("Bright blue")
part2.Parent = model
model.PrimaryPart = part1
model.Parent = workspace
local obstruction = Instance.new("Part")
obstruction.Name = "Obstruction"
obstruction.Size = Vector3.new(10, 10, 10)
obstruction.Position = Vector3.new(0, 10, 0)
obstruction.Anchored = true
obstruction.BrickColor = BrickColor.new("Bright green")
obstruction.Parent = workspace
task.wait(3)
model:MoveTo(END_POSITION)

RemovePersistentPlayer

()

Macht dieses Modell für den angegebenen Spieler nicht mehr persistent.Dies garantiert nicht, dass das Modell sofort für den Spieler entfernt wird; nach dem Aufruf dieser Methode wird das Modell für diesen Spieler als Atomic behandelt und bleibt solange vorhanden, wie es sich innerhalb des Ziel-Streaming-Radius befindet.

ModelStreamingMode muss auf PersistentPerPlayer gesetzt werden, damit sich das verhalten ändert, als ergebnis der entfernung.

Parameter

playerInstance: Player

Die Player, um dieses Modell nicht mehr persistent zu machen.

Standardwert: ""

Rückgaben

()

ScaleTo

()

Modelle enthalten einen dauerhaften kanonischen Skalierungsfaktor, der bei 1 für neu erstellte Modelle beginnt.Diese Funktion skaliert das Modell, um die Pivot-Position in Bezug auf den Skalierungsfaktor 1 zu betrachten.Um dies zu erreichen, tut es zwei Dinge:

  • Setzt den aktuellen Skalierungsfaktor des Modells auf den angegebenen Wert
  • Größe und Position aller abstehenden Instanzen entsprechend ändert und neu positioniert

Die Skalierung von Standorten erfolgt rund um den Drehpunktstandort.

Alle "geometrischen" Eigenschaften von abstehenden Instanzen werden skaliert.Das beinhaltet natürlich die Größen der Teile, aber hier sind einige weitere Beispiele für Eigenschaften, die skaliert werden:

  • Die Länge von Gelenken wie WeldConstraints , und Class.Rope|Ropes
  • Physische Geschwindigkeiten und Kräfte wie Hinge.MaxServoTorque
  • Visuelle Eigenschaften wie Größe von Partikelstrahlern
  • Andere Längeneigenschaften wie Sound.RollOffMinDistance

Parameter

newScaleFactor: number
Standardwert: ""

Rückgaben

()

TranslateBy

()

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.

Die Übersetzung wird im Weltraum angewendet, nicht im Objektbereich, was bedeutet, dass selbst wenn die Teile des Modells unterschiedlich ausgerichtet sind, es sich immer noch entlang der Standardachse bewegt.

Parameter

delta: Vector3

Das Vector3 zur Übersetzung der Model durch.

Standardwert: ""

Rückgaben

()

Code-Beispiele

This sample demonstrates how Model:TranslateBy ignores collisions and respects the orientation of the model.

A simple two part Model is created, rotated 45 degrees on the Y axis, and its PrimaryPart is set. An large obstruction part is placed next to it.

After 5 seconds Model:TranslateBy is used to direct the model to move inside the obstruction part. The model will move inside of the obstruction and maintain it's current orientation.

Model TranslateBy

local START_POSITION = Vector3.new(-20, 10, 0)
local END_POSITION = Vector3.new(0, 10, 0)
local model = Instance.new("Model")
local part1 = Instance.new("Part")
part1.Size = Vector3.new(4, 4, 4)
part1.CFrame = CFrame.new(START_POSITION) * CFrame.Angles(0, math.rad(45), 0)
part1.Anchored = true
part1.BrickColor = BrickColor.new("Bright yellow")
part1.Parent = model
local part2 = Instance.new("Part")
part2.Size = Vector3.new(2, 2, 2)
part2.CFrame = part1.CFrame * CFrame.new(0, 3, 0)
part2.Anchored = true
part2.BrickColor = BrickColor.new("Bright blue")
part2.Parent = model
model.PrimaryPart = part1
model.Parent = workspace
local obstruction = Instance.new("Part")
obstruction.Name = "Obstruction"
obstruction.Size = Vector3.new(10, 10, 10)
obstruction.Position = Vector3.new(0, 10, 0)
obstruction.Transparency = 0.5
obstruction.Anchored = true
obstruction.BrickColor = BrickColor.new("Bright green")
obstruction.Parent = workspace
task.wait(3)
-- use TranslateBy to shift the model into the obstruction
model:TranslateBy(END_POSITION - START_POSITION)

Ereignisse