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, 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 ein Humanoid und ein Part mit dem Namen Kopf in einem Model über Eltern unter einem Model erscheinen, wird eine Namens-/Gesundheits-GUI über dem Modellangezeigt; siehe 1>Charaktername/Gesundheitsanzeige1> für Details.
  • 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

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

  • 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

  • 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

Parallel lesen
Plugin-Sicherheit

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

Parallel lesen

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

Parallel lesen

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

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

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

Nicht repliziert
Parallel lesen

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 = 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

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

void

Parameter

playerInstance: Player
Standardwert: "nil"

Rückgaben

void

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.Model
local part = workspace.Part
local orientation, size = model:GetBoundingBox()
-- Skalieren und Position des Teils entsprechen dem Kopierkasten des Modells
part.Size = size
part.CFrame = orientation

Rückgaben

Ein CFrame, das die Ausrichtung des Volumes repräsentiert, das von einem Vector3 repräsentiert die Größe des Volumes.

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

Die Vector3 Größe des Model .

Code-Beispiele

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 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

Instances

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

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

void

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

position: Vector3

Der Vector3 der Model wird verschoben.


Rückgaben

void

Code-Beispiele

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

void

Parameter

playerInstance: Player
Standardwert: "nil"

Rückgaben

void

ScaleTo

void

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

newScaleFactor: number

Rückgaben

void

TranslateBy

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.

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

delta: Vector3

Der Vector3 um das Model von.


Rückgaben

void

Code-Beispiele

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