Model
*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:
- 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
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.
La parte principal de Model , o nil si no se establecerexplícitamente.
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 .
Determina dónde se encuentra el eje de un Model que no tiene Class.Model.PrimaryPart establecido.
Métodos
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 .
Mueve el PrimaryPart a la posición especificada. Si no se ha especificado una parte primaria, se utilizará la parte raíz del modelo.
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.
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.
Sin objetodisponible.
Gets the pivot of a PVInstance.
Transforms the PVInstance along with all of its descendant PVInstances such that the pivot is now located at the specified CFrame.
Propiedades
LevelOfDetail
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
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
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
-- 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
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
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 = modelworkspace.RedPart.Parent = modelmodel.Parent = workspaceprint(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
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
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.Modellocal part = workspace.Partlocal orientation, size = model:GetBoundingBox()-- Redimensionar y posicionar la parte igual a la caja de contorno del aplicación de modeladopart.Size = sizepart.CFrame = orientation
Devuelve
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
Muestras 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
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
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
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
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
Devuelve
Muestras 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)
ScaleTo
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
Devuelve
TranslateBy
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
Devuelve
Muestras 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)