Model
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
Les modèles sont des objets de conteneur, ce qui signifie qu'ils regroupent des objets. Ils sont généralement utilisés pour contenir des collections de BaseParts et ont une série de fonctions qui étendent leur fonctionnalité.
Les modèles sont destinés à représenter des groupements géométriques . Si votre groupement n'a pas d'interprétation géométrique, par exemple une collection de Scripts, utilisez un Folder à la place.
Les modèles dont les parties sont jointes par des jonctions (de sorte qu'elles puissent se déplacer ou être détruites via la simulation physique) ont généralement un PrimaryPart configurer, car il spécifie la partie dans le modèle que le pivot et la boîte de destination s'abonneren tant que modèle se déplace. Les modèles statiques qui restent en un seul endroit ne bénéficient pas d'avoir un configurerde partie primaire.
Les modèles ont une large gamme d'applications, y compris les personnages Roblox. Ils ont également un certain nombre de comportements uniques qui sont importants à garder à l'esprit :
- Si la position d'une partie sur l'axe Y touche la valeur Workspace.FallenPartsDestroyHeight, et que c'était le dernier objet à l'intérieur d'un Model, le modèle serait également détruit.
- Lorsqu'il est utilisé dans un lieu avec Workspace.StreamingEnabled défini sur vrai, la valeur de ModelStreamingMode contrôle divers comportements autour de la façon dont le modèlisationet/ou les descendants sont répliqués et/ou supprimés des clients. En outre, la valeur de LevelOfDetail affecte la
Comme avec tous les types Instance, le fait qu'un parent Model
Échantillons de code
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)
Résumé
Propriétés
Définit le niveau de détail sur le modèle pour les expériences avec le streaming d'instance activé.
Contrôle le comportement de génération du modèle sur Models lorsque le mode d'instantiation est activé.
La partie principale du Model , ou nil si elle n'est pas explicitement configurer.
Propriété seulement utilisée pour escalader le modèle autour de son pivot. En configurant cette propriété, l'échelle sera déplacée comme si Model/ScaleTo était appelée dessus.
Détermine l'endroit où le pivot d'un Model qui fait ne a pas de set Model.PrimaryPart est situé.
Méthodes
Définit ce modèle pour être persistant pour le joueur spécifié. Model.ModelStreamingMode doit être défini sur PersistentPerPlayer pour que le comportement soit modifié en tant que résultat de l'ajout.
Retourne une description d'un volume qui contient toutes les parties d'un modèle.
Renvoie la taille de la plus petite boîte de définition qui contient tous les BaseParts dans le Model, avec le Model.PrimaryPart si c'est configurer.
Renvoie tous les objets Player que ce modèle d'objet persiste pour. Le comportement varie en fonction de si cet objet de modèle est appelé à partir d'un Script ou d'un LocalScript.
Renvoie l'échelle de canon du modèlisation, qui est par défaut 1 pour les nouveaux modèles créés et changera lorsqu'elle sera mise à l'échelle via Model/ScaleTo .
Déplace le PrimaryPart à l'endroit donné. Si une partie principale n'a pas été spécifiée, la partie racine du modèle sera utilisée.
Ce modèle n'est plus persistant pour le joueur spécifié. Model.ModelStreamingMode doit être réglé sur PersistentPerPlayer pour que le comportement soit modifié en tant que résultat de la suppression.
Définit le facteur de mise à l'échelle du modèlisation, ajustant la taille et l'emplacement de toutes les instances descendantes afin qu'elles aient ce facteur de mise à l'échelle par rapport à leurs tailles et emplacements d'origine lorsque le facteur de mise à l'échelle était 1.
Déplace un Model par l'écart donné Vector3, en conservant l'orientation du modèlisation. Si un autre BasePart ou 2>Class.Terrain2> existe déjà à la nouvelle position, le 5>Class.Model5> dépassera l'objet.
Obtient le pivot d'un PVInstance.
Transforme le PVInstance ainsi que tous ses descendants PVInstances afin que le pivot soit maintenant situé dans le CFrame spécifié.
Propriétés
LevelOfDetail
Définit le niveau de détail sur le modèle pour les expériences avec streaming activé.
Lorsqu'il est réglé sur StreamingMesh, un maillage de résolution inférieure « imposter » (couleur, maillage granulaire qui entoure toutes les parties enfant du modèlisation) rendu à l'extérieur du rayon de diffusion.
Lorsqu'il est réglé sur Disabled ou Automatic, les maillages de résolution inférieure ne seront pas affichés.
ModelStreamingMode
Contrôle la façon dont Models sont diffusés et reçus lorsque le mode diffuser est activé. Le comportement dépend de l'enum sélectionné. N'a aucun effet lorsque le mode diffuser n'est pas activé.
Cette propriété ne doit être modifiée que dans Studio via la fenêtre propriétés lorsque le flux est activé, ou dans Scripts , mais jamais dans LocalScripts (ceci peut entraîner un comportement non défini).
PrimaryPart
Pointe vers la partie principale du Model. La partie principale est la BasePart qui agit comme la référence physique pour le pivot du modèlisation. C'est-à-dire que lorsque des parties dans le modèle sont déplacées en raison de la simulation physique ou d'autres moyens, le pivot se déplacera en synchronie avec la partie principale.
Remarquez que Models n'a pas PrimaryPart par défaut. Si vous créez un modèle qui nécessite d'être agi par la physique, vous devez manuellement définir cette propriété dans Studio ou dans un script. Si la partie principale n'est pas configurer, le pivot restera à l'emplacement d'où il se trouve dans l'espace du monde, même si les parties dans le modèle sont déplacées.
Notez également que lorsque vous configurez cette propriété, il doit s'agir d'un BasePart qui est un descendant du modèlisation. Si vous essayez de configurer Model.PrimaryPart à un
La règle générale pour les modèles est que :
- Les modèles dont les parties sont jointes par des jantes physiques telles que WeldConstraints ou Motor6Ds doivent avoir une partie principale attribuée. Par exemple, les modèles de Roblox ont leur Model.PrimaryPart défini par défaut sur 1> HumanoidRootPart1> par défaut.
- Les modèles statiques (généralement Anchored ) qui restent en un seul endroit sauf si un script les déplace explicitement ne nécessitent pas d'avoir un Model.PrimaryPart et tendent à ne pas bénéficier d'avoir un configurer.
Échantillons de code
-- 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
En configurant cette propriété dans la fenêtre des propriétés, le modèle sera mis à l'échelle comme si Model/ScaleTo était appelé dessus, ce qui mettra à l'échelle tous les cas descendants dans le modèle afin que le modèle ait le facteur d'échelle spécifié par rapport à sa taille d'origine.
Cette propriété n'est disponible que dans Studio et lancera une erreur si elle est utilisée dans un Script ou un LocalScript . Model/ScaleTo et 1> Model/GetScale1> devraient être utilisés à partir des scripts.
WorldPivot
Cette propriété détermine l'endroit où le pivot d'un Model qui fait Class.Model.PrimaryPart n'a pas a lieu. Si le Model.PrimaryPart a un p
Pour un Model créé récemment, son pivot sera traité comme le centre de la boîte de délimitation de ses contenus jusqu'à ce que la propriété Class.Model.WorldPivot soit configurerpour la première fois. Une fois que le pivot mondial est défini pour la première fois, il est impossible de restaurer ce comportement initial.
Le plus courant, déplaçant le modèle avec les outils Studio, ou avec des fonctions de déplacement de modèle telles que PVInstance:PivotTo() et Model:MoveTo(), définira le pivot mondial et ainsi mettre fin à ce nouveau comportement de modèle.
Le but de ce comportement est de permettre au code Lua d'obtenir un pivot logique en créant un nouveau modèle et en associant des objets à ce modèle, en évitant le besoin d'exporter manuellement Model.WorldPivot à chaque fois que vous créez un modèle dans le code.
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"
Échantillons de code
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éthodes
GetBoundingBox
Cette fonction renvoie une description d'un volume qui contient tous les enfants BasePart dans un Model . L'orientation du volume est basée sur l'orientation de l' Class.
Si il n'y a pas de PrimaryPart pour le modèlisation, la zone de délimitation sera ajuster aux axes du monde.
local model = workspace.Modellocal part = workspace.Partlocal orientation, size = model:GetBoundingBox()-- Redimensionner et positionner la partie égale à la boîte de modèlisationpart.Size = sizepart.CFrame = orientation
Retours
GetExtentsSize
Retourne la taille de la plus petite boîte de délimitation qui contient tous les BaseParts dans le Model. Si Model.PrimaryPart existe, alors la boîte de délimitation sera ajustée sur cette partie. Si une
Notez que cette fonction ne renvoie que la taille de la plus petite boîte de boîte de modélisation, et le développeur doit utiliser sa propre méthode pour obtenir la position de la boîte de boîte de modélisation.
Retours
Échantillons de code
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
Lorsque cette méthode est appelée à partir d'un Script, il renvoie tous les objets Player que ce modèle est persistant pour. Lorsque elle est appelée à partir d'un LocalScript, cette méthode ne vérifie que si ce modèle est persistant pour le 2>Class.Players.LocalPlayer|LocalPlayer2>.
Retours
Une table avec tous les objets Player pour lesquels ce modèle d'objet est persistant.
GetScale
Les modèles contiennent un facteur de mise à l'échelle de canon persistant, qui commence à 1 pour les nouveaux modèles créés et change à mesure que le modèle est mis à l'échelle en appelant Model/ScaleTo. Cette fonction renvoie le facteur de mise à l'échelle actuel du modèlisation.
Le facteur de mise à l'échelle actuel n'a pas d'effet directe sur la taille des instances sous le modèlisation. Il est utilisé pour les auteurs de contenu et les scripts à buts de rappeler comment le modèle a été mise à l'échelle par rapport à sa taille d'origine.
Dans une session donnée, le modèle cache les informations de taille de l'original de la descendant Instances après la première appellation Model/ScaleTo . Cela signifie que l'appellation suivante ScaleTo(x) suivie de l'appellation ScaleTo(1)
Le facteur d'échelle affecte le comportement du moteur d'une manière : le facteur d'échelle d'un modèle sera appliqué aux décalages joints de animations joués sur un AnimationController sous ce modèlisation, afin que les racks animés jouent correctement les animations même lorsque ils sont échalés.
Retours
Le facteur de mise à l'échelle actuel du modèlisation.
Échantillons de code
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
Déplace le PrimaryPart à l'endroit donné. Si une partie principale n'a pas été spécifiée, la partie racine du modèle sera utilisée, mais la partie racine n'est pas déterministe et il est recommandé de toujours définir une partie principale lors de l'utilisation de MoveTo().
Si il y a des obstacles où le modèle doit être déplacé, tels que Terrain ou d'autres BaseParts, le modèle sera déplacé verticalement jusqu'à ce qu'il n'y ait rien en chemin. Si ce comportement n'est pas souhaité, PVInstance:PivotTo() doit être utilisé à la place.
Remarquez que la rotation n'est pas préservée lorsque vous déplacez un modèle avec MoveTo() . Il est recommandé d'utiliser soit TranslateBy() ou PVInstance:PivotTo() si la rotation actuelle du modèle doit être préservée.
Paramètres
Retours
Échantillons de code
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
Les modèles contiennent un facteur de mise à l'échelle persistant, qui commence à 1 pour les nouveaux modèles créés. Cette fonction met à l'échelle le modèlisation, autour de l'emplacement de pivot, par rapport à la façon dont il s'agencerait à un facteur de mise à l'échelle de 1. Pour accomplir cela, il fait deux choses :
- Définit le facteur de mise à l'échelle actuel du modèle sur la valeur spécifiée
- Redimensionne et réorganise donc toutes les instances descendant
L'échelle des emplacements est faite autour de l'emplacement de pivot.
Toutes les propriétés « géométriques » des instances descendantes seront mises à l'échelle. Cela inclut évidemment les tailles des parties, mais voici quelques autres exemples de propriétés qui sont mises à l'échelle :
- La longueur des joints comme WeldConstraints et Class.Rope|Ropes
- Des vitesses et des forces physiques comme Hinge.MaxServoTorque
- Propriétés visuelles comme les tailles des émetteurs de particules
- D'autres propriétés de longueur comme Sound.RollOffMinDistance
Paramètres
Retours
TranslateBy
Déplace un Model par l'écart donné Vector3, en conservant l'orientation du modèlisation. Si un autre BasePart ou 2>Class.Terrain2> existe déjà à la nouvelle position, le 5>Class.Model5> dépassera l'objet.
La traduction est appliquée dans l'espace mondial plutôt que dans l'espace objet, ce qui signifie même si les parties du modèlisationsont orientées différemment, il s'en déplacera toujours le long de l'axe standard.
Paramètres
Retours
Échantillons de code
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)