Model
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
Modelle sind Container-Objekte, was bedeutet, dass sie Objekte zusammen gruppieren. Sie werden am besten verwendet, um Sammlungen von BaseParts und einer Reihe von Funktionen zu erweitern, die ihre Funktionalität erweitern.
Modelle sollen geometrische Gruppierungen darstellen. Wenn Ihre Gruppierung keine geometrische Interpretation hat, z. B. eine Sammlung von Scripts , verwenden Sie stattdessen einen Folder.
Modelle, deren Komponententeile mit Schrauben verbunden sind (d.h. sie können sich nicht nur um bewegen oder zerstören), haben normalerweise ein PrimaryPart festlegen, da es angeben, welche Teile innerhalb des Modells die Pivot und Bounding Box "folgen" werden. Statische Modelle, die an einem Ort bleiben, profitieren nicht von einem festlegen.
Modelle haben eine Reihe von Anwendungen, einschließlich Roblox-Spielercharaktere. Sie haben auch eine Reihe einzigartiger Verhaltensweisen, die wichtig zu beachten sind:
- Wenn die Position eines Teils auf der Y-Achse auf den Workspace.FallenPartsDestroyHeight -Wert trifft und es das letzte Objekt innerhalb eines Model war, wird das Modell auch zerstört.
- Wenn in einem Ort mit Workspace.StreamingEnabled auf wahr gesetzt, kontrolliert die Werte von ModelStreamingMode die verschiedenen Verhaltensweisen, wie das Modell und seine Nachkommen von Clients repliziert und/oder entfernt werden. Darüber hinaus beeinflussen die Werte von LevelOfDetail die Rendering des
Wie bei allen Instance-Typen, die Tatsache, dass ein Elternteil Class.Model
Code-Beispiele
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
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.
Der Hauptteil des Model , oder nil wenn nicht explizit festlegen.
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.
Bestimmt, wo sich der Pivot eines Model , der nicht hat, befindet.
Methoden
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.
Bewegt den PrimaryPart an die angegebene Position. Wenn eine Primärteil nicht angegeben wurde, wird die Wurzelteil des Modells verwendet.
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.
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.
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.
Erhalten Sie die Ausrichtung einer PVInstance.
Transformiert die PVInstance zusammen mit all ihren Nachkommen PVInstances, wodurch der Pivot jetzt an der angegebenen CFrame liegt.
Eigenschaften
LevelOfDetail
Setzt die Detaillierungsstufe im Modell für Erlebnisse mit streaming aktiviertem.
Wenn auf StreamingMesh eingestellt, wird ein niedrigeres Resolution-"Impositor"-Mesh (gefärbtes, raue Meshes, das um alle Kinderteile des Modells herumwickelt) im Streaming-Radius dargestellt.
Wenn auf Disabled oder Automatic eingestellt, werden keine niedrere Auflösungsmeshes angezeigt.
ModelStreamingMode
Steuert, wie Models sind in- und ausgelaufen, wenn Streaming- aktiviert ist. Das Verhalten hängt vom ausgewählten Enumer ab. Hat keinen Effekt, wenn Streaming nicht aktiviert ist.
Diese Eigenschaft sollte nur in Studio über das Eigenschaften-Fenster beim Streamen aktiviert sein, oder in Scripts, aber nie in LocalScripts (was zu unbekanntem Verhalten führen kann).
PrimaryPart
Zeigt auf den primären Teil des Model. Der primäre Teil ist die BasePart, die als physische Referenz für die Ausrichtung des Modells dient. Das ist, wenn Teile innerhalb des Modells aufgrund von physischen Simulationen oder anderen Mitteln bewegt werden, wird die Ausrichtung in Einklang mit dem primären Teil synchronisiert.
Beachten Sie, dass Models keinen PrimaryPart standardmäßig setzt. Wenn Sie ein Modell erstellen, das von der Physik aufgehen muss, sollten Sie diese Eigenschaft manuell in Studio oder innerhalb eines Skript, das. PL: die Skriptsfestlegen. Wenn die Hauptteile nicht gesetzt sind, bleibt die Pivot im selben Platzwie die Teile innerhalb des Modells, auch wenn die Teile innerhalb des Modells verschoben werden
Beachten Sie auch, dass wenn Sie diese Eigenschafteneinstellen, dass es ein BasePart ist, das ein Nachkommen des Modells ist. Wenn Sie versuchen, Model.PrimaryPart auf
Die allgemeine Regel für Modelle lautet:
- Modelle, deren Teile miteinander über physische Joints verbunden sind, wie z. B. WeldConstraints oder Motor6Ds sollten ein primäres Teil zugewiesen haben. Zum Beispiel haben Roblox-Charaktermodelle standardmäßig ihr Model.PrimaryPart auf 2>HumanoidRootPart2> festge
- Statische (normalerweise Anchored ) Modelle, die in einem Ort bleiben, wenn ein Skript sie nicht explizit bewegt, benötigen keine Model.PrimaryPart und neigen dazu, keinen Nutzen daraus zu ziehen, wenn es eine festlegenvon ihnen gibt.
Code-Beispiele
-- 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
Durch das Festlegen dieser Eigenschaft in der Eigenschaften-Registerkarte wird das Modell skaliert, als ob Model/ScaleTo auf das Modell aufgerufen wurde, und alle nachkommenden Instanzen im Modell skaliert, sodass das Modell den angegebenen Skalierungsfaktor in Bezug auf seine ursprüngliche Größe hat.
Diese Eigenschaft ist nur in Studio verfügbar und wird einen Fehler anzeigen, wenn sie in einem Script oder LocalScript verwendet wird. Model/ScaleTo und 1> Model/GetScale1> sollten von Skripts verwendet werden.
WorldPivot
Dieses Eigenschaft bestimmt, wo sich der Pivot eines Model , der nicht hat, befindet. Wenn der Pivot eines Class.Model.PrimaryPart , der nicht hat, ist der Pivot des
Für ein neu erstelltes Model wird sein Pivot als Zentrum der Kartonkontrolle seiner Inhalte behandelt, bis die erste Zeit sein Model.WorldPivot -Eigenschaft festlegenist. Sobald der Weltpivot zum ersten Mal festgelegt ist, ist es unmöglich, dieses ursprüngliche Verhalten wiederherzustellen.
Die meisten Common-Bewegungen des Modells mit den Studio-Tools oder mit Modell-Bewegungsfunktionen wie PVInstance:PivotTo() und Model:MoveTo() werden die Weltachse einstellen und damit dieses neue Modell-Verhalten beenden.
Der Zweck dieser Verhaltensweise ist es, Lua-Code so zu gestalten, dass er einen sinnvollen Pivot erhalten kann, indem er ein neues Modell erstellt und Objekte darauf übergeordnet erstellt, um das Notwendig ist, jedes Mal, wenn Sie ein Modell in Codeserstellen, explizit Model.WorldPivot festzulegen.
local model = Instance.new("Model")workspace.BluePart.Parent = modelworkspace.RedPart.Parent = modelmodel.Parent = workspaceprint(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
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
GetBoundingBox
Diese Funktion gibt eine Beschreibung eines Volumes zurück, das alle BasePart Kinder innerhalb eines Model enthält. Die Orientierung des Volumens basiert auf der Orientierung des
Wenn für das Modell keine PrimaryPart vorhanden ist, wird die Abgrenzungskiste auf die Weltachsen ausgerichtet.
local model = workspace.Modellocal part = workspace.Partlocal orientation, size = model:GetBoundingBox()-- Skalieren und Position des Teils entsprechen dem Kopierkasten des Modellspart.Size = sizepart.CFrame = orientation
Rückgaben
GetExtentsSize
Gibt die Größe der kleinsten Kombinationskiste zurück, die alle BaseParts in der Model enthält. Wenn Model.PrimaryPart existiert, wird die Kombinationskiste auf dieses Teil ausgerichtet. Wenn
Beachten Sie, dass diese Funktion nur die Größe der kleinsten Auswahlboxzurückgibt, und der Entwickler muss seinen eigenen Methoden verwenden, um die Position des Auswahlboxzu erhalten.
Rückgaben
Code-Beispiele
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
Wenn diese Methode von einem Script aufgerufen wird, gibt sie alle Player -Objekte zurück, für die dieses Modell persistent ist. Wenn sie von einem LocalScript aufgerufen wird, überprüft diese Methode nur, ob dieses Modell für den 2>Class.Players.LocalPlayer|LocalPlayer2> dauerhaft ist.
Rückgaben
Eine Tabelle mit allen Player Objekten, für die dieses Modell-Objekt besteht.
GetScale
Modelle enthalten einen persistenten Skalierungsskalierungs-Faktor, der bei der Erstellung neuer Modelle und Änderungen an dem Model wie folgt ausfällt: 1 für neu erstellte Modelle und Änderungen an dem Model, wenn das Model skaliert wird, indem Model/ScaleTo aufgerufen wird. Diese Funktion gibt den aktuellen Skalierungsskalierungs-Faktor des Modells zurück.
Der aktuelle Skalierungsfaktor wirkt sich nicht direkt auf die Größe von Instanzen unter dem Modell aus. Es wird für Inhalts-Autorien und Skript-Autorien verwendet, um sich daran zu erinnern, wie das Modell in Bezug auf seine ursprüngliche Größe skaliert wurde.
Innerhalb einer bestimmten Sitzung wird das Modell die genauen ursprünglichen Größeninformationen der Abstamm Instanzen nach dem ersten Model/ScaleTo Aufruf speichern. Dies bedeutet, dass das Aufrufen ScaleTo(x) gefolgt von
Der Skalierungsfaktor wirkt das Verhalten des Motors in eine Weise: Der Skalierungsfaktor eines Modells wird auf die gemeinsamen Offsets von animations angewendet, die auf einem AnimationController unter diesem Modell gespielt werden, damit animierte Ricks richtig wiedergegeben werden, auch wenn sie skaliert werden.
Rückgaben
Der aktuelle Skalierungsfaktor des Modells.
Code-Beispiele
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 eine Primärigkeit nicht angegeben wurde, wird die Wurzel des Modells verwendet, aber die Wurzel ist nicht deterministisch und es wird empfohlen, dass Sie eine Primärität immer verwenden, wenn Sie MoveTo() verwenden.
Wenn es irgendwelche Hindernisse gibt, bei denen das Modell bewegt werden muss, wie z. B. Terrain oder andere BaseParts, wird das Modell vertikal nach oben verschoben, bis es nichts im Weg ist. Wenn dieses Verhalten nicht gewünscht ist, sollte PVInstance:PivotTo() stattdessen verwendet werden.
Beachten Sie, dass dieRotation nicht erhalten wird, wenn Sie ein Modell mit MoveTo() bewegen. Es wird empfohlen, entweder TranslateBy() oder PVInstance:PivotTo() zu verwenden, wenn die aktuelleRotation des Modells erhalten werden muss.
Parameter
Rückgaben
Code-Beispiele
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)
ScaleTo
Modelle enthalten einen persistenten Skalierungsfaktor, der bei 1 für neu erstellte Modelle beginnt. Diese Funktion skaliert das Modell, um den Pivot-Ort, in Bezug auf das, wie es auf einen Skalierungsfaktor von 1 aussieht. Um dies zu erreichen, tut es zwei Dinge:
- Setzt den aktuellen Skalierungsfaktor des Modells auf den angegebenen Wert
- Zur Anpassung der Größe und Neuplatzierung aller abgeleiteten Instanzen entsprechend
Die Skalierung von Positionen erfolgt um die Pivot-Position.
Alle "geometrischen" Eigenschaften von Nachkommen-Instanzen werden skaliert. Das beinhaltet offensichtlich die Größen der Teile, aber hier sind einige andere Beispiele für Eigenschaften, die skaliert werden:
- Die Länge von Joints wie WeldConstraints und Class.Rope|Ropes
- Physische Geschwindigkeiten und Kräfte wie Hinge.MaxServoTorque
- Visuelle Eigenschaften wie die Größe von Partikel-Emittern
- Andere Längen属enschaften wie Sound.RollOffMinDistance
Parameter
Rückgaben
TranslateBy
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.
Die Übersetzung gilt für den Weltraum, nicht für den Platz, was bedeutet, dass sich die Teile des Modells auch wenn sie anders ausgerichtet sind, immer noch entlang der Standardachse bewegen.
Parameter
Rückgaben
Code-Beispiele
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)