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 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:
- Cuando un Humanoid y un Part llamado Cabeza estén patrocinados bajo un modelo, una interfaz de nombre/salud aparecerá sobre el modelo; véase Nombre/visualización de salud del personaje para detalles.
- Si la posición de una parte en el eje Y golpea el valor Workspace.FallenPartsDestroyHeight , y fue el último objeto dentro de un Model, el modelo también se destruirá.
- Cuando se usa en un lugar con Workspace.StreamingEnabled establecido en verdad, el valor de ModelStreamingMode controla varios comportamientos alrededor de cómo se replica y/o elimina el modelo y cualquier descendiente de los clientes.Además, el valor de LevelOfDetail afecta el rendimiento de la renderización del modelo.
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.
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 experiencias con transmisión de instancias habilitada.
Controla el comportamiento de transmisión de modelos en Models.
La parte principal de la Model , o nil si no se configura explícitamente.
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.
Determina dónde se encuentra el eje de un que no tenga un conjunto establecido.
Propiedades
Métodos
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.
Mueve el PrimaryPart a la posición dada. Si no se ha especificado una parte principal, se usará la parte raíz del modelo.
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.
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.
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
Obtiene el pivote de un PVInstance .
Transforma el PVInstance junto con todos sus descendientes PVInstances de tal manera que el pivote ahora se encuentra en el punto especificado CFrame.
Propiedades
LevelOfDetail
ModelStreamingMode
PrimaryPart
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
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
GetExtentsSize
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
Devuelve
GetScale
Devuelve
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
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)
TranslateBy
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)