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 li raggruppano insieme. Sono la soluzione migliore per contenere collezioni di BaseParts e hanno una serie di funzioni che estendono le loro funzionalità.

I modelli sono intesi a rappresentare aggregamenti geometrica. Se il tuo gruppoing non ha un'interpretazione geometrica, ad esempio una collezione di Scripts , usa un Folder invece.

I modelli cui le parti costituenti sono congiunte con i chiodi (in modo che possano muoversi o essere distrutti tramite simulazione fisica) di solito hanno un PrimaryPart Impostare, poiché specifica quale parte nel modello il pivot e la scatola di connessione "Seguire" mentre il modello si muove. I modelli dinamici che rimangono in un posto non ne traranno beneficio di avere un Impostaredi parti primaria.

I modelli hanno un'ampia gamma di applicazioni, tra cui i personaggi dei giocatori Roblox. Hanno anche un certo numero di comportamenti unici che sono importanti da tenere a mente:

  • Quando un Humanoid e un Part chiamato Testa appaiono sotto un modello, una GUI 2>Nome/Salute2> con nome e salute viene visualizzata sopra il modello; vedi 5>Nome/Salute GUI5> per i dettagli.
  • Se la posizione di una parte sulla Y assi tocca il valore Workspace.FallenPartsDestroyHeight , e era l'ultimo oggetto all'interno di un Model , il modello sarà distrutto anche.
  • Quando viene utilizzato in un luogo con Workspace.StreamingEnabled impostato su true, il valore di ModelStreamingMode controlla varie azioni intorno a come il modello e qualsiasi discendente vengono replicati e/o rimossi dai client. Inoltre, il valore di LevelOfDetail influenza la

Come con tutti i tipi Instance , il fatto che un padre Class.Model</

Campioni di codice

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à

  • Imposta il livello di dettaglio sul modello per le esperienze con la funzione di streaming in sessione abilitata.

  • Controlla il comportamento di streaming del modello su Models quando è abilitato lo streaming delle istanze.

  • Lettura Parallela

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

  • Non Replicato
    Non programmabile
    Lettura Parallela

    Proprietà utilizzata solo dall'editor per scalare il modello intorno al suo pivot. Impostando questa proprietà sposterà lo scala come se Model/ScaleTo fosse stata chiamata su di esso.

  • Non Replicato
    Lettura Parallela

    Determina dove si trova il punto di rotazione di un Model che non ha non un set Model.PrimaryPart è posizionato.

Proprietà provenienti da PVInstance

Metodi

  • AddPersistentPlayer(playerInstance : Player):void

    Imposta questo modello per essere persistente per il Giocatorespecificato. Model.ModelStreamingMode deve essere impostato su PersistentPerPlayer per il comportamento di modifica come risultato dell'aggiungimento.

  • Restituisce una descrizione di un volume che contiene tutte le parti di un modello.

  • Restituisce il valore della più piccola scatola di confezione che contiene tutti i BaseParts in the Model , allineato con il Model.PrimaryPart se è Impostare.

  • Restituisce tutti gli oggetti Player che questo oggetto modello è persistente. Il comportamento varia in base a se questo metodo viene chiamato da un Script o da un LocalScript .

  • Restituisce la scala di canone del modello, che predefinito è 1 per i nuovi modelli creati e cambierà man mano che viene scala via Model/ScaleTo .

  • MoveTo(position : Vector3):void

    Sposta il PrimaryPart alla posizione specificata. Se una parte primaria non è stata specificata, la parte di base del modello sarà utilizzata.

  • RemovePersistentPlayer(playerInstance : Player):void

    Questo modello non è più persistente per il Giocatorespecificato. Model.ModelStreamingMode deve essere impostato su PersistentPerPlayer per il comportamento di modifica come risultato della rimozione.

  • ScaleTo(newScaleFactor : number):void

    Imposta il fattore di escala del modello, regolando la dimensione e la posizione di tutte le istanze discendenti in modo che abbiano quel fattore di escala rispetto alle loro dimensioni e posizione iniziali quando il fattore di escala era 1.

  • TranslateBy(delta : Vector3):void

    Sposta un Model da un dato Vector3 OFFSET, preservando l'orientamento del modello. Se un altro BasePart o 1> Class.Terrain1> esiste già nella nuova posizione, allora il 4> Class.Model4> si sovrappone all'oggetto dichiarato.

Metodi provenienti da PVInstance

Proprietà

Lettura Parallela
Sicurezza Plugin

Imposta il livello di dettaglio sul modello per le esperienze con streaming abilitato.

Quando impostato su StreamingMesh, un mesh "imposter" di risoluzione inferiore (色ato, granulato che avvolge tutte le parti figlie del modello) rende fuori dal raggio di streaming.

Quando impostato su Disabled o Automatic, le maglie di pixelizzazione a bassa risoluzione non saranno visualizzate.

ModelStreamingMode

Lettura Parallela

Controlla come Models vengono riprodotti in e out quando la riproduzione in streaming è abilitata. Il comportamento dipende dall'enum selezionato. Non ha effetto quando la riproduzione non è abilitata.

Questa proprietà dovrebbe essere modificata solo in Studio tramite la finestra Proprietà quando lo streaming è abilitato, o in Scripts , ma non in LocalScripts (fai così che può comportare comportamenti non definiti).

PrimaryPart

Lettura Parallela

Punta alla parte principale del Model . La parte principale è la BasePart che agisce come riferimento fisico per il pivot del modello. Ciò significa che quando le parti nel modello vengono spostate in base a simulazione fisica o altri mezzi, il pivot si muove in sincronia con la parte principale.

Nota che Models non hanno PrimaryPart impostato per impostazione predefinita. Se stai creando un modello che richiede di essere attuato dalla fisica, devi impostare manualmente questa proprietà in Studio o all'interno di uno script. Se la parte principale non è Impostare, il pivot rimarrà allo stesso posto nello Spaziodel mondo, anche se le parti all'interno del modello vengono spostate

Nota anche che quando si imposta questa Proprietà, deve essere un BasePart che è un discendente del modello. Se provi a impostare Model.PrimaryPart su un Class.BasePart

La regola generale per i modelli è che:

  • I modelli cui le parti sono connesse tramite articolazioni fisiche come WeldConstraints o Motor6Ds dovrebbero avere una parte principale assegnata. Ad esempio, i modelli dei personaggi Roblox hanno il loro Model.PrimaryPart impostato su 2>UmanoidRootPart2>
  • Modelli statici (di solito Anchored ) che rimangono in un unico posto a meno che uno script non li sposti esplicitamente non richiedono un Model.PrimaryPart e tendono a beneficiare di avere un Impostare.

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

Impostando questa proprietà nella finestra delle proprietà, il modello sarà ridimensionato in modo che Model/ScaleTo venga chiamato su di esso, ridimensionando tutte le istanze discendenti nel modello in modo che il modello abbia il fattore di ridimensionamento specificato rispetto alla sua dimensione originale.

Questa proprietà è disponibile solo in Studio e mostrerà un errore se usata in un Script o in un LocalScript . Model/ScaleTo e 1> Model/GetScale1> dovrebbero essere usati dagli script.

WorldPivot

Non Replicato
Lettura Parallela

Questa proprietà determina dove si trova il pilastro di un Model che non ha Class.Model.PrimaryPart impostato. Se il Model.PrimaryPart 2>Class.Model.

Per un Model appena creato, il suo pivot sarà trattato come il centro della sua scatola di contenuti fino alla prima volta Class.Model.WorldPivot sua proprietà è Impostare. Una volta che il pivot mondiale è impostato per la prima volta, è impossibile ripristinare questo comportamento iniziale.

La maggior parte delle volte, spostare il modello con gli strumenti di Studio, o con funzioni di movimento del modello come PVInstance:PivotTo() e Model:MoveTo(), imposterà l'asse del mondo e quindi porterà questo nuovo comportamento del modello.

Lo scopo di questo comportamento è consentire al codice Lua di ottenere un'impostazione sensata semplicemente creando un nuovo modello e attribuendo oggetti a esso, evitando la necessità di impostare esplicitamente Model.WorldPivot ogni volta che crei un modello in codice.


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"

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

void

Parametri

playerInstance: Player
Valore predefinito: "nil"

Restituzioni

void

GetBoundingBox

Questa funzione restituisce una descrizione di un volume che contiene tutti BasePart figli all'interno di un Model . L'orientamento del volume è basato sull'orientamento del

Se non esiste PrimaryPart per il modello, la casella di contorno sarà allineata sugli assi mondiali.


local model = workspace.Model
local part = workspace.Part
local orientation, size = model:GetBoundingBox()
-- Ridimensiona e posiziona la parte uguale alla scatola di contorno del modello
part.Size = size
part.CFrame = orientation

Restituzioni

Un CFrame che rappresenta l'orientamento del volume seguito da un Vector3 che rappresenta la dimensione del volume.

GetExtentsSize

Restituisce il valore della più piccola scatola di legame che contiene tutti i BaseParts in Model . Se Model.PrimaryPart esiste, allora la scatola di legame sarà allineata su quella parte. Se

Nota che questa funzione restituisce solo la dimensione della più piccola Quadro di selezionedi connessione, e lo sviluppatore deve impiegare il proprio metodo per ottenere la posizione della casella di Quadro di selezione.


Restituzioni

Il Vector3 estende la dimensione della Model .

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

Quando questo metodo viene chiamato da un Script , restituisce tutti gli oggetti Player che questo modello è persistente per. Quando viene chiamato da un LocalScript , questo metodo controlla solo se questo modello è persistente per il 2>Class.Players.LocalPlayer|LocalPlayer2> .


Restituzioni

Instances

Una tabella con tutti gli oggetti Player per cui questo oggetto modello è persistente.

GetScale

I modelli contengono un fattore di scala persistente, che inizia con 1 per i modelli appena creati e cambia man mano che il modello viene scalato chiamando Model/ScaleTo . Questa funzione restituisce il fattore di scala persistente del modello.

Il fattore di dimensioni attuale non colpisce direttamente la dimensione delle istanze sotto il modello. Viene utilizzato per scopi di autorizzazione e scripting per ricordare come il modello è stato scala rispetto alla sua dimensione originale.

All'interno di una Sessionespecifica, il modello memorizzerà le informazioni originali precise della dimensione discendente delle istanze dopo la prima chiamata Model/ScaleTo . Ciò significa che chiamando ScaleTo(x) seguita da ScaleTo(1)</

Il fattore di escala influenza il comportamento del motore in un modo: il fattore di escala di un modello sarà applicato alle偏enze congiunte di animations giocato su un AnimationController sotto quel modello, in modo che le rig animate possano riprodurre le animazioni in modo corretto anche quando sono ingrandite.


Restituzioni

Il fattore di scala canonica attuale del modello.

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

void

Sposta il PrimaryPart alla posizione specificata. Se una parte primaria non è stata specificata, la parte di radice del modello sarà utilizzata, ma la parte di radice non è deterministica e si consiglia di impostare sempre una parte primaria quando si utilizza MoveTo() .

Se ci sono delle limitazioni in cui il modello deve essere spostato, come Terrain o altri BaseParts, il modello sarà spostato verticalmente fino a quando non ci sarà nulla in modo. Se questo comportamento non è desiderato, PVInstance:PivotTo() dovrebbe essere utilizzato invece.

Nota che la rotazione non viene preservata quando si muove un modello con MoveTo() . È consigliato utilizzare either TranslateBy() o PVInstance:PivotTo() se la rotazione attuale del modello deve essere preservata.

Parametri

position: Vector3

Il Vector3 il Model viene spostato.


Restituzioni

void

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

void

Parametri

playerInstance: Player
Valore predefinito: "nil"

Restituzioni

void

ScaleTo

void

I modelli contengono un fattore di scala persistente, che inizia con 1 per i modelli appena creati. Questa funzione scala il modello, intorno alla posizione di pivot, rispetto a come apparirebbe un fattore di scala di 1. Per raggiungerlo, fa due cose:

  • Imposta il fattore di escala corrente del modello sul valore specificato
  • Ridimensiona e riposiziona le istanze discendenti di conseguenza

Lo scaling delle posizioni viene eseguito intorno alla posizione di pivot.

Tutte le proprietà "geometriche" delle istanze discendenti saranno ingrandite. Questo ovviamente include le dimensioni delle parti, ma qui ci sono alcuni altri esempi di proprietà che sono ingrandite:

  • La lunghezza delle giunte come WeldConstraints e Class.Rope|Ropes
  • Velocità e forze fisiche come Hinge.MaxServoTorque
  • Proprietà visive come le dimensioni degli emitter di parti
  • Altre proprietà di lunghezza come Sound.RollOffMinDistance

Parametri

newScaleFactor: number

Restituzioni

void

TranslateBy

void

Sposta un Model da un dato Vector3 OFFSET, preservando l'orientamento del modello. Se un altro BasePart o 1> Class.Terrain1> esiste già nella nuova posizione, allora il 4> Class.Model4> si sovrappone all'oggetto dichiarato.

La traduzione viene applicata nello spazio del mondo piuttosto che nello Spaziodell'oggetto, il che significa che anche se le parti del modello sono orientate in modo diverso, si muoveranno comunque lungo l'asse standard.

Parametri

delta: Vector3

Il Vector3 per tradurre il Model di.


Restituzioni

void

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