Model
*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:
- Quando um Humanoid e um Part chamado Cabeça são parentados sob um modelo, uma GUI de nome/saúde aparecerá sobre o modelo; veja Nome/Exibição de Saúde de Personagem para detalhes.
- Se a posição de uma peça no eixo Y atingir o valor Workspace.FallenPartsDestroyHeight, e ela foi o último objeto dentro de um Model, o modelo também será destruído.
- Quando usado em um local com Workspace.StreamingEnabled definido como verdadeiro, o valor de ModelStreamingMode controla vários comportamentos em torno de como o modelo e quaisquer descendentes são replicados e/ou removidos dos clientes.Além disso, o valor de LevelOfDetail afeta a renderização do modelo.
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.
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
Define o nível de detalhe no modelo para experiências com streaming de instâncias ativado.
Controla o comportamento de streaming de modelo em Models.
A parte principal do Model ou nil se não for explicitamente definida.
Propriedade exclusiva do editor usada para escalar o modelo em torno de seu pivô. Definir essa propriedade moverá a escala como se Model/ScaleTo fosse chamada sobre ela.
Determina onde o pivô de um Model que não tem não tem um conjunto Model.PrimaryPart está localizado.
Propriedades
Métodos
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.
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.
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.
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.
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
Obtém o pivô de um PVInstance .
Transforma o PVInstance ao longo de todos os seus descendentes PVInstances de modo que o pivô agora está localizado no CFrame especificado.
Propriedades
LevelOfDetail
ModelStreamingMode
PrimaryPart
Amostras de código
-- 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
Amostras de código
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
GetExtentsSize
Devolução
Amostras de código
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
Devolução
GetScale
Devolução
Amostras de código
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
Devolução
Amostras de código
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
Parâmetros
Devolução
Amostras de código
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)