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 de contenedor, lo que significa que agrupan objetos juntos. Son mejores usados para contener colecciones de BaseParts y tienen una serie de funciones que extienden su funcionalidad.

Los modelos se destinan a representar agrupaciones geométricas. Si su agrupación no tiene interpretación geométrica, por ejemplo, una colección de Class.Script|Scripts, use un Scripts en su lugar.

Los modelos cuyas partes constituyentes están unidas con juntas (para que puedan moverse o ser destruidos a través de la simulación de física) generalmente tienen un PrimaryPart establecer, ya que especifica qué parte dentro del modelo el pivote y la caja de enfoque "seguirá" a medida que el modelo se mueve. Los modelos estáticos que se quedan en un lugar no obtienen beneficio de tener un establecerde partes prim

Los modelos tienen una amplia gama de aplicaciones, incluidos los personajes de los jugadores de Roblox. También tienen una serie de comportamientos únicos que son importantes de tener en cuenta:

  • Cuando un Humanoid y un Part llamado Cabeza aparecen bajo un aplicación de modelado, una interfaz de nombre/salud aparecerá sobre el aplicación de modelado; véase 2>Nombre/salud GUI2> para obtener más información.
  • Si la posición de una parte en el eje Y toca el valor Workspace.FallenPartsDestroyHeight y era el último objeto dentro de un Model , el modelo se destruirá también.
  • Cuando se usa en un lugar con Workspace.StreamingEnabled configurado como verdadero, el valor de ModelStreamingMode controla varios comportamientos alrededor de cómo el aplicación de modeladoy cualquier descendiente se replica y/o se elimina de los clientes. Además, el valor de LevelOfDetail afecta la renderización

Al igual que con todos los tipos de Instance, el hecho de que un padre Model

Muestras de código

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

  • Establece el nivel de detalle en el modelo para las experiencias con transmisión de instancia habilitada.

  • Controla el comportamiento de streaming del modelo en Models cuando se habilita el streaming de instancia.

  • Leer paralelo

    La parte principal de Model , o nil si no se establecerexplícitamente.

  • No replicado
    No programable
    Leer paralelo

    Propiedad de Editor únicamente usada para escalar el modelo alrededor de su eje. Al configurar esta propiedad, se moverá la escala como si se hubiera llamado a Model/ScaleTo .

  • No replicado
    Leer paralelo

    Determina dónde se encuentra el eje de un Model que no tiene Class.Model.PrimaryPart establecido.

Propiedades heredados de PVInstance

Métodos

  • AddPersistentPlayer(playerInstance : Player):void

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

  • Restaura una descripción de un volumen que contiene todas las partes de un Modelo.

  • Restablece el tamaño de la caja de contorno más pequeña que contiene todos los BaseParts en el Model, alineado con el Model.PrimaryPart si se establecer.

  • Devuelve todos los objetos Player que son persistentes para este objeto de modelo. El comportamiento varía según sea que se llame a este método desde un Script o un LocalScript .

  • Devuelve la escala de canon del aplicación de modelado, 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):void

    Mueve el PrimaryPart a la posición especificada. Si no se ha especificado una parte primaria, se utilizará la parte raíz del modelo.

  • RemovePersistentPlayer(playerInstance : Player):void

    Este modelo ya no es persistente para el jugador especificado. Model.ModelStreamingMode debe establecerse en PersistentPerPlayer para que el comportamiento cambie como resultado de la eliminación.

  • ScaleTo(newScaleFactor : number):void

    Establece el factor de escala del aplicación de modelado, 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):void

    Sin objetodisponible.

Métodos heredados de PVInstance

Propiedades

Leer paralelo
Seguridad del plugin

Establece el nivel de detalle en el modelo para las experiencias con instancia streaming habilitado.

Cuando se establece a StreamingMesh, un malla de menor resolución "imposter" (ubicado, coarse malla que se envuelve alrededor de todas las partes de hijo del aplicación de modelado) renders fuera del rango de streaming.

Cuando se establece a Disabled o Automatic, las mallas de resolución inferior no se mostrarán.

ModelStreamingMode

Leer paralelo

Controla cómo se envían y se reciben los Models cuando se habilita el streaming de instancia. El comportamiento depende del índice seleccionado. No tiene efecto cuando el streaming no está habilitado.

Esta propiedad solo se debe cambiar en Studio a través de la ventana Propiedades cuando se habilita la transmisión, o en Scripts , pero nunca en LocalScripts (lo que puede resultar en un comportamiento no definido).

PrimaryPart

Leer paralelo

Señala a la parte principal de la Model . La parte principal es la BasePart que actúa como referencia física para el pivot del aplicación de modelado. Es decir, cuando las partes dentro del modelo se mueven debido a simulación física o otros medios, el pivot se moverá en sincronía con la parte principal.

Nota que Models no tienen PrimaryPart por defecto. Si estás creando un modelo que necesita ser actuado por la física, deberías establecer manualmente esta propiedad en Studio o dentro de un script. Si la parte principal no está establecida, la pivote seguirá estando en la misma ubicación en el espacio del mundo, incluso si las partes dentro del modelo se mueven.

Tenga en cuenta también que cuando se establece esta propiedad, debe ser un BasePart que es un descendiente del aplicación de modelado. Si intenta establecer Model.PrimaryPart en un

La regla general para los modelos es que:

  • Los modelos cuyas partes se unen juntas a través de uniones físicas, como WeldConstraints o Motor6Ds, deben tener una parte principal asignada. Por ejemplo, los modelos de personajes de Roblox tienen su Model.PrimaryPart establecido en el 2>HumanoidRootPart
  • Los modelos estáticos (usualmente Class.BasePart.Anchored|Anchored) que se mantienen en un lugar sin que se muevan explícitamente no requieren un Class.Model.PrimaryPart y tienden a no beneficiarse de tener un establecer.

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

Establecer esta propiedad en la pestaña de propiedades escalará el modelo como si se hubiera llamado a Model/ScaleTo , escalando todas las instancias descendientes en el modelo para que el modelo tenga el factor de escala especificado en relación con su tamaño original.

Esta propiedad solo está disponible en Studio y mostrará un error si se usa en un Script o LocalScript . Model/ScaleTo y 1> Model/GetScale1> deberían usarse desde los scripts.

WorldPivot

No replicado
Leer paralelo

Esta propiedad determina dónde se encuentra el pivote de un Model que hace Class.Model.PrimaryPart que no tiene Model.PrimaryPart configurado. Si el

Para un Model recién creado, se tratará su pivote como el centro de la caja de contenedores de sus contenidos hasta que se establecerla propiedad Class.Model.WorldPivot por primera vez. Una vez que se establezca la pivote por primera vez, es imposible restaurar este comportamiento inicial.

La mayoría de las veces, mover el modelo con las herramientas de Studio, o con funciones de movimiento de modelos como PVInstance:PivotTo() y Model:MoveTo(), establecerá el pivote mundial y así finalizará este nuevo comportamiento del modelo.

El propósito de este comportamiento es permitir que el código Lua obtenga un eje de pivotaje razonable simplemente creando un nuevo modelo y asigniendo objetos a él, evitando la necesidad de configurar explícitamente Model.WorldPivot cada vez que crea un modelo en el código.


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"

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

void

Parámetros

playerInstance: Player
Valor predeterminado: "nil"

Devuelve

void

GetBoundingBox

Esta función返回一个包含所有 BasePart 子在一个 Model 中的描述。 La orientación del volumen se basa en la orientación de la Class.Model.

Si no hay PrimaryPart para el aplicación de modelado, la caja de límites se alineará con los ejes del mundo.


local model = workspace.Model
local part = workspace.Part
local orientation, size = model:GetBoundingBox()
-- Redimensionar y posicionar la parte igual a la caja de contorno del aplicación de modelado
part.Size = size
part.CFrame = orientation

Devuelve

Un CFrame que representa la orientación del volumen seguida por un Vector3 que representa el tamaño del volumen.

GetExtentsSize

Devuelve el tamaño de la caja de contorno más pequeña que contiene todos los BaseParts en el Model . Si Model.PrimaryPart existe, entonces la caja de contorno se alineará con esa parte. Si no se

Tenga en cuenta que esta función solo返回最小的 caja de caja delimitadora, y el desarrollador debe emplear su propio método para obtener la posición de la caja de caja delimitadora.


Devuelve

El tamaño de la extensión de Vector3 del Model .

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

Cuando este método se llama desde un <a href="/reference/engine/databases/databases.md"> Class.Script </a>, devuelve todos los objetos de <a href="/reference/engine/databases/databases.md"> Class.Player </a> que son persistentes para este modelo. Cuando se llama desde un <a href="/reference/engine/databases/databases.md"> Class.LocalScript </a>, este método solo comprueba si este modelo es persistente para el <a href="/reference/engine/dat


Devuelve

Instances

Una tabla con todos los objetos Player para los que este objeto de modelo es persistente.

GetScale

Los modelos contienen un factor de escala persistente, que comienza con 1 para los modelos recién creados y cambia a medida que el modelo se escala al llamar Model/ScaleTo . Esta función devuelve el factor de escala actual del aplicación de modelado.

El factor de escala actual no afecta directamente el tamaño de las Instancias debajo del aplicación de modelado. Se utiliza para propósitos de autoría de contenido y programación de scripts para recordar cómo se ha escalado el modelo en relación con su tamaño original.

Dentro de una sesión dada, el modelo almacenará la información de tamaño original precisa de las Instancias descendientes después de la primera llamada Model/ScaleTo . Esto significa que al llamar ScaleTo(x) seguido por ScaleTo(1) obt

El factor de escala afecta el comportamiento del motor de una manera: el factor de escala de un modelo se aplicará a los desplazamientos conjuntos de animations jugados en un AnimationController bajo ese aplicación de modelado, para que las rigs animadas reproduzcan correctamente las animaciones incluso cuando se escalan.


Devuelve

El factor de escala actual del aplicación de modelado.

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

void

Mueve el PrimaryPart a la posición especificada. Si no se ha especificado una parte primaria, se utilizará la parte raíz del modelo, pero la parte raíz no es determinista y se recomienda que siempre se establezca una parte primaria al usar MoveTo() .

Si hay obstrucciones en las que el modelo debe ser movido, como Terrain o otros BaseParts, el modelo se moverá verticalmente hasta que no haya nada en el camino. Si este comportamiento no es deseado, PVInstance:PivotTo() debería usarse en su lugar.

Tenga en cuenta que la rotación no se mantiene al mover un modelo con MoveTo() . Se recomienda usar either TranslateBy() o PVInstance:PivotTo() si la rotación actual del modelo necesita ser preservada.

Parámetros

position: Vector3

El Vector3 el Model se mueve a.


Devuelve

void

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

void

Parámetros

playerInstance: Player
Valor predeterminado: "nil"

Devuelve

void

ScaleTo

void

Los modelos contienen un factor de escala persistente, que comienza con 1 para los modelos recién creados. Esta función escala el aplicación de modelado, alrededor de la ubicación de pivot, en relación con cómo se vería un factor de escala de 1. Para lograr esto, hace dos cosas:

  • Establece el factor de escala actual del modelo a la valor especificado
  • Redimensiona y reposiciona todas las instancias descendientes según

La escalado de ubicaciones se realiza alrededor de la ubicación de pivot.

Todas las propiedades "geométricas" de las Instancias descendientes se escalarán. Eso obviamente incluye los tamaños de las partes, pero aquí hay algunos otros ejemplos de propiedades que se escalan:

  • La longitud de las soldaduras como WeldConstraints y Class.Rope|Ropes
  • Velocidades y fuerzas físicas como Hinge.MaxServoTorque
  • Propiedades visuales, como el tamaño de los emisores de partículas
  • Otras propiedades de longitud como Sound.RollOffMinDistance

Parámetros

newScaleFactor: number

Devuelve

void

TranslateBy

void

Sin objetodisponible.

La traducción se aplica en el espacio del mundo en lugar del espacio del objeto, lo que significa que incluso si las partes del aplicación de modeladoestán orientadas de manera diferente, todavía se moverán en el eje estándar.

Parámetros

delta: Vector3

El Vector3 para traducir el Model por.


Devuelve

void

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