Model

Afficher les obsolètes

*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 :

  • Lorsqu'un Humanoid et un Part nommé Tête apparaissent sous un modèlisation, une GUI nom/santé apparaît sur le modèlisation; voir 2>Nom/santé du personnage2> pour plus de détails.
  • 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

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)

Résumé

Propriétés

  • Sécurité des plugins
    Lecture parallèle

    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é.

  • Lecture parallèle

    La partie principale du Model , ou nil si elle n'est pas explicitement configurer.

  • Non répliqué
    Non scriptable
    Lecture parallèle

    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.

  • Non répliqué
    Lecture parallèle

    Détermine l'endroit où le pivot d'un Model qui fait ne a pas de set Model.PrimaryPart est situé.

Propriétés hérités de PVInstance

Méthodes

  • AddPersistentPlayer(playerInstance : Player):void

    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 .

  • MoveTo(position : Vector3):void

    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.

  • RemovePersistentPlayer(playerInstance : Player):void

    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.

  • ScaleTo(newScaleFactor : number):void

    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.

  • TranslateBy(delta : Vector3):void

    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.

Méthodes hérités de PVInstance

Propriétés

Sécurité des plugins
Lecture parallèle

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

Lecture parallèle

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

Lecture parallèle

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

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

Non répliqué
Non scriptable
Lecture parallèle

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

Non répliqué
Lecture parallèle

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 = 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"

Échantillons de code

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éthodes

AddPersistentPlayer

void

Paramètres

playerInstance: Player
Valeur par défaut : "nil"

Retours

void

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.Model
local part = workspace.Part
local orientation, size = model:GetBoundingBox()
-- Redimensionner et positionner la partie égale à la boîte de modèlisation
part.Size = size
part.CFrame = orientation

Retours

Un CFrame représentant l'orientation du volume suivie d'un Vector3 représentant la taille du volume.

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

La taille Vector3 de l'extens de Model .

Échantillons de code

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

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

Instances

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

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

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

position: Vector3

Le Vector3 le Model est déplacé.


Retours

void

Échantillons de code

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

Paramètres

playerInstance: Player
Valeur par défaut : "nil"

Retours

void

ScaleTo

void

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

newScaleFactor: number

Retours

void

TranslateBy

void

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

delta: Vector3

Le Vector3 pour traduire le Model par.


Retours

void

Échantillons de code

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)

Évènements