Model

Mostrar obsoleto

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Modelos são objetos de contêiner, o que significa que eles agrupam objetos juntos.Eles são melhores usados para armazenar coleções de BaseParts e têm uma série de funções que expandem sua funcionalidade.

Modelos são destinados a representar grupos geométricos .Se sua agrupamento não tiver interpretação geométrica, por exemplo, uma coleção de Scripts , use um Folder em vez disso.

Modelos cujas partes constituintes sejam combinadas com juntas (para que possam se mover ou serem destruídos por meio de simulação de física) geralmente têm um conjunto PrimaryPart, pois especifica qual parte dentro do modelo a alavanca e a caixa de contorno "seguirão" à medida que o modelo se move.Modelos estáticos que permanecem em um único local não se beneficiam de ter um conjunto de peças primárias.

Modelos têm um amplo leque de aplicações, incluindo personagens de jogadores do Roblox.Eles também têm uma série de comportamentos únicos que são importantes para ter em mente:

Como em todos os tipos Instance tipos, o fato de um pai Model ser replicado para um cliente não garante que todos os seus filhos sejam replicados.Isso é particularmente importante se essas instâncias estiverem sendo acessadas por código executando no cliente, como em um LocalScript .Usar ModelStreamingMode com valores como Atomic pode garantir que todo o modelo e todos os seus descendentes estejam presentes se o modelo pai existir no cliente, ou você pode usar WaitForChild() quando a atomicidade não for desejada.

Amostras de código

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)

Resumo

Propriedades

Propriedades herdados de PVInstance

Propriedades

Métodos

  • AddPersistentPlayer(playerInstance : Player):()

    Define esse modelo para ser persistente para o jogador especificado. ModelStreamingMode deve ser definido como PersistentPerPlayer para que o comportamento seja alterado como resultado da adição.

  • Retorna uma descrição de um volume que contém todas as partes de um Modelo.

  • Retorna o tamanho da caixa de contorno mais pequena que contém todo o BaseParts na Model, alinhado com o Model.PrimaryPart se for definido.

  • Retorna todos os objetos Player que este objeto de modelo é persistente para.O comportamento varia dependendo de se este método é chamado de um Script ou de um LocalScript.

  • Retorna a escala canônica do modelo, que padrão é 1 para modelos recém-criados e mudará à medida que for escalado via Model/ScaleTo.

  • MoveTo(position : Vector3):()

    Mova o PrimaryPart para a posição dada. Se uma parte primária não tiver sido especificada, a parte raiz do modelo será usada.

  • RemovePersistentPlayer(playerInstance : Player):()

    Torna esse modelo não persistente mais para o jogador especificado.ModelStreamingMode deve ser definido para PersistentPerPlayer para que o comportamento seja alterado como resultado da remoção.

  • ScaleTo(newScaleFactor : number):()

    Define o fator de escala do modelo, ajustando o tamanho e a localização de todas as Instâncias descendentes de modo que elas tenham esse fator de escala em relação aos seus tamanhos e locais iniciais quando o fator de escala era 1.

  • TranslateBy(delta : Vector3):()

    Muda um Model por o deslocamento dado Vector3, preservando a orientação do modelo.Se outro BasePart ou Terrain já existir na nova posição, então o Model vai sobrepor o objeto dito.

Métodos herdados de PVInstance

Métodos

Propriedades

Segurança do plugin
Ler Parallel

ModelStreamingMode

Ler Parallel

PrimaryPart

Ler Parallel

Amostras de código

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

Não replicado
Não scriptável
Ler Parallel

WorldPivot

Não replicado
Ler Parallel

Amostras de código

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)

Métodos

AddPersistentPlayer

()

Parâmetros

playerInstance: Player
Valor Padrão: ""

Devolução

()

GetBoundingBox


Devolução

GetExtentsSize


Devolução

Amostras de código

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

Devolução

Instances

GetScale


Devolução

Amostras de código

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

()

Parâmetros

position: Vector3
Valor Padrão: ""

Devolução

()

Amostras de código

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

()

Parâmetros

playerInstance: Player
Valor Padrão: ""

Devolução

()

ScaleTo

()

Parâmetros

newScaleFactor: number
Valor Padrão: ""

Devolução

()

TranslateBy

()

Parâmetros

delta: Vector3
Valor Padrão: ""

Devolução

()

Amostras de código

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)

Eventos