Model
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
I modelli sono oggetti container, il che significa che gruppano gli oggetti insieme.Sono migliori per contenere collezioni di BaseParts e hanno una serie di funzioni che estendono la loro funzionalità.
I modelli sono destinati a rappresentare gruppi geometrici .Se la tua raggruppazione non ha alcuna interpretazione geometrica, ad esempio una collezione di Scripts , usa un Folder invece.
I modelli i cui componenti sono uniti con articolazioni (in modo che possano muoversi o essere distrutti tramite simulazione fisica) di solito hanno un set PrimaryPart , poiché specifica quale parte del modello la pivot e la scatola di confezionamento seguiranno come il modello si muove.I modelli statici che rimangono in un luogo non traggono vantaggio dall'avere un set di parti primarie.
I modelli hanno un'ampia gamma di applicazioni, tra cui i personaggi del giocatore Roblox.Hanno anche una serie di comportamenti unici che è importante tenere a mente:
- Quando un Humanoid e un Part chiamato Testa sono genitori sotto un modello, un nome/health GUI apparirà sopra il modello; vedi Nome del personaggio/visualizzazione della salute per i dettagli.
- Se la posizione di una parte sull'asse Y colpisce il valore Workspace.FallenPartsDestroyHeight, e era l'ultimo oggetto all'interno di un Model, anche il modello verrà distrutto.
- Quando viene utilizzato in un luogo con Workspace.StreamingEnabled impostato su vero, il valore di ModelStreamingMode controlla vari comportamenti su come il modello e qualsiasi discendente vengono replicati e/o rimossi dai client.Inoltre, il valore di LevelOfDetail influisce sul rendering del modello.
Come con tutti i tipi Instance tipi, il fatto che un genitore Model viene replicato a un client non garantisce che tutti i suoi figli vengono replicati.Questo è particolarmente importante se queste istanze vengono accessate da un codice in esecuzione sul client, come in un LocalScript .L'utilizzo di ModelStreamingMode con valori come Atomic può garantire che l'intero modello e tutti i suoi discendenti siano presenti se il modello padre esiste sul client, o puoi utilizzare WaitForChild() quando l' atomicità non è desiderata.
Campioni di codice
The following sample includes a basic function that takes a table of objects and parents them into a new Model, returning that Model.
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)
Sommario
Proprietà
Imposta il livello di dettaglio sul modello per le esperienze con streaming di istanza abilitato.
Controlla il comportamento di streaming del modello su Models quando l' streaming delle istanze è abilitato.
La parte principale del Model , o nil se non esplicitamente impostata.
Proprietà utilizzata solo dall'editor per ridimensionare il modello attorno al suo asse. Impostare questa proprietà sposterà la scala come se Model/ScaleTo fosse stata chiamata su di essa.
Determina dove si trova il punto di rotazione di un che non ha un set è situato.
Proprietà
Metodi
Imposta questo modello per essere persistente per il giocatore specificato. ModelStreamingMode deve essere impostato su PersistentPerPlayer perché il comportamento venga cambiato come risultato dell'aggiunta.
Restituisce una descrizione di un volume che contiene tutte le parti di un modello.
Restituisce la dimensione della più piccola scatola di confine che contiene tutto il BaseParts in Model, allineata con la Model.PrimaryPart se è impostata.
Restituisce tutti gli oggetti Player che questo oggetto modello è persistente per.Il comportamento varia a seconda se questo metodo viene chiamato da un Script o da un LocalScript.
Restituisce la scala canonica del modello, che predefinisce 1 per i modelli appena creati e cambierà man mano che verrà scala tramite Model/ScaleTo .
Sposta il PrimaryPart a la posizione data. Se una parte primaria non è stata specificata, verrà utilizzata la parte radice del modello.
Rende questo modello non più persistente per il giocatore specificato.ModelStreamingMode deve essere impostato su PersistentPerPlayer perché il comportamento venga modificato come risultato della rimozione.
Imposta il fattore di ridimensionamento del modello, regolando la dimensione e la posizione di tutte le istanze discendenti in modo che abbiano quel fattore di ridimensionamento rispetto alle loro dimensioni iniziali e alla posizione quando il fattore di ridimensionamento era 1.
Sposta un Model con lo spostamento dato Vector3 , preservando l'orientamento del modello.Se un altro BasePart o Terrain esiste già nella nuova posizione allora il Model sovrapporrà l'oggetto dichiarato.
Metodi
Ottiene il punto focale di un PVInstance .
Trasforma il PVInstance insieme a tutti i suoi discendenti PVInstances in modo che il punto di rotazione sia ora situato all'interno del CFrame specificato.
Proprietà
LevelOfDetail
ModelStreamingMode
PrimaryPart
Campioni di codice
-- 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
WorldPivot
Campioni di codice
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)
Metodi
GetExtentsSize
Restituzioni
Campioni di codice
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
Restituzioni
GetScale
Restituzioni
Campioni di codice
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
Parametri
Restituzioni
Campioni di codice
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)
TranslateBy
Parametri
Restituzioni
Campioni di codice
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)