Model

Visualizza obsoleti

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

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.

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)

Sommario

Proprietà

  • Sicurezza Plugin
    Lettura Parallela

    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.

  • Lettura Parallela

    La parte principale del Model , o nil se non esplicitamente impostata.

  • Non Replicato
    Non programmabile
    Lettura Parallela

    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.

  • Non Replicato
    Lettura Parallela

    Determina dove si trova il punto di rotazione di un che non ha un set è situato.

Proprietà provenienti da PVInstance

Proprietà

Metodi

  • AddPersistentPlayer(playerInstance : Player):()

    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 .

  • MoveTo(position : Vector3):()

    Sposta il PrimaryPart a la posizione data. Se una parte primaria non è stata specificata, verrà utilizzata la parte radice del modello.

  • RemovePersistentPlayer(playerInstance : Player):()

    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.

  • ScaleTo(newScaleFactor : number):()

    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.

  • TranslateBy(delta : Vector3):()

    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 provenienti da PVInstance

Metodi

Proprietà

Sicurezza Plugin
Lettura Parallela

ModelStreamingMode

Lettura Parallela

PrimaryPart

Lettura Parallela

Campioni di codice

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

Non Replicato
Non programmabile
Lettura Parallela

WorldPivot

Non Replicato
Lettura Parallela

Campioni di codice

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)

Metodi

AddPersistentPlayer

()

Parametri

playerInstance: Player
Valore predefinito: ""

Restituzioni

()

GetBoundingBox


Restituzioni

GetExtentsSize


Restituzioni

Campioni di codice

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

Restituzioni

Instances

GetScale


Restituzioni

Campioni di codice

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

()

Parametri

position: Vector3
Valore predefinito: ""

Restituzioni

()

Campioni di codice

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

()

Parametri

playerInstance: Player
Valore predefinito: ""

Restituzioni

()

ScaleTo

()

Parametri

newScaleFactor: number
Valore predefinito: ""

Restituzioni

()

TranslateBy

()

Parametri

delta: Vector3
Valore predefinito: ""

Restituzioni

()

Campioni di codice

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)

Eventi