Model

Mostrar obsoleto

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Los modelos son objetos contenedores, lo que significa que agrupan objetos juntos.Se utilizan mejor para contener colecciones de BaseParts y tienen una serie de funciones que extienden su funcionalidad.

Los modelos están destinados a representar grupos geométricos .Si tu agrupación no tiene interpretación geométrica, por ejemplo, una colección de Scripts , utiliza un Folder en su lugar.

Los modelos cuyas partes constituyentes se unen con bisagras (para que puedan moverse o destruirse a través de simulación de física) generalmente tienen un conjunto PrimaryPart , ya que especifica qué parte dentro del modelo seguirá la bisagra y la caja de contención como el modelo se mueve.Los modelos estáticos que se quedan en un lugar no se benefician de tener un conjunto de partes primarias.

Los modelos tienen un amplio rango de aplicaciones, incluidos los personajes de jugadores de Roblox.También tienen una serie de comportamientos únicos que es importante tener en cuenta:

Al igual que con todos los tipos Instance tipos, el hecho de que un padre Model se replica a un cliente no garantiza que todos sus hijos se replican.Esto es particularmente importante si estas instancias se están accediendo por código que se ejecuta en el cliente, como en un LocalScript .El uso de ModelStreamingMode con valores como Atomic puede garantizar que todo el modelo y todos sus descendientes estén presentes si el modelo padre existe en el cliente, o puedes usar WaitForChild() cuando no se desee la atomización.

Muestras 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)

Resumen

Propiedades

  • Seguridad del plugin
    Leer paralelo

    Establece el nivel de detalle en el modelo para experiencias con transmisión de instancias habilitada.

  • Controla el comportamiento de transmisión de modelos en Models.

  • Leer paralelo

    La parte principal de la Model , o nil si no se configura explícitamente.

  • No replicado
    No programable
    Leer paralelo

    Propiedad solo del editor utilizada para escalar el modelo alrededor de su pivote. Establecer esta propiedad moverá la escala como si se llamara Model/ScaleTo a ella.

  • No replicado
    Leer paralelo

    Determina dónde se encuentra el eje de un que no tenga un conjunto establecido.

Propiedades heredados de PVInstance

Propiedades

Métodos

  • AddPersistentPlayer(playerInstance : Player):()

    Establece este modelo para ser persistente para el jugador especificado. ModelStreamingMode debe establecerse en PersistentPerPlayer para que el comportamiento se cambie como resultado de la adición.

  • Devuelve una descripción de un volumen que contiene todas las partes de un modelo.

  • Devuelve el tamaño de la caja de contención más pequeña que contiene todo el BaseParts en el Model, alineada con el Model.PrimaryPart si se establece.

  • Devuelve todos los objetos Player que este objeto de modelo es persistente para.El comportamiento varía según si este método se llama desde un Script o un LocalScript.

  • Devuelve la escala canónica del modelo, que se establece por defecto en 1 para los modelos recién creados y cambiará a medida que se escala a través de Model/ScaleTo.

  • MoveTo(position : Vector3):()

    Mueve el PrimaryPart a la posición dada. Si no se ha especificado una parte principal, se usará la parte raíz del modelo.

  • RemovePersistentPlayer(playerInstance : Player):()

    Hace que este modelo ya no sea persistente para el jugador especificado. ModelStreamingMode debe establecerse en PersistentPerPlayer para que el comportamiento se cambie como resultado de la eliminación.

  • ScaleTo(newScaleFactor : number):()

    Establece el factor de escala del modelo, ajustando el tamaño y la ubicación de todas las Instancias descendientes para que tengan ese factor de escala en relación con sus tamaños y ubicaciones iniciales cuando el factor de escala era 1.

  • TranslateBy(delta : Vector3):()

    Cambia un Model por el desplazamiento dado Vector3, preservando la orientación del modelo.Si otro BasePart o Terrain ya existe en la nueva posición, entonces el Model se superpondrá al objeto dicho.

Métodos heredados de PVInstance

Métodos

Propiedades

Seguridad del plugin
Leer paralelo

ModelStreamingMode

Leer paralelo

PrimaryPart

Leer paralelo

Muestras 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

No replicado
No programable
Leer paralelo

WorldPivot

No replicado
Leer paralelo

Muestras 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 predeterminado: ""

Devuelve

()

GetBoundingBox


Devuelve

GetExtentsSize


Devuelve

Muestras 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

Devuelve

Instances

GetScale


Devuelve

Muestras 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 predeterminado: ""

Devuelve

()

Muestras 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 predeterminado: ""

Devuelve

()

ScaleTo

()

Parámetros

newScaleFactor: number
Valor predeterminado: ""

Devuelve

()

TranslateBy

()

Parámetros

delta: Vector3
Valor predeterminado: ""

Devuelve

()

Muestras 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