Propriétés et attributs

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Rendre les jeux interactifs signifie souvent manipuler les propriétés et attributs des objets :

  • Les propriétés font partie de la classe de l'objet. Par exemple, la propriété BasePart.Anchored contrôle la physique de la pièce. Dans un jeu d'athlétisme, vous pourriez vouloir ancrer un disque ou un javelot au moment où il atterrit afin que les joueurs aient un indicateur visuel de la distance parcourue.

  • Les attributs sont essentiellement des propriétés personnalisées que vous définissez. Par exemple, le projet de référence Plant utilise des attributs pour définir le prix d'achat des graines et la taille maximale qu'un pot peut contenir.

Ordre de réplication

Avant de commencer à récupérer et à manipuler des objets, vous devez comprendre l'ordre de réplication.

Le moteur Roblox ne garantit pas l'ordre dans lequel les objets (et les changements aux objets) sont répliqués du serveur au client, ce qui rend la méthode Instance:WaitForChild() essentielle pour accéder aux objets dans les scripts client, en particulier les objets dans Workspace.

Par exemple, si un script serveur modifie une propriété d'une instance dans l'espace de travail puis appelle RemoteEvent:FireAllClients(), le changement de propriété peut se répliquer au client avant ou après que RemoteEvent.OnClientEvent se déclenche. Utilisez les méthodes et événements disponibles pour détecter les changements plutôt que de supposer qu'un changement a été répliqué. Les changements du même type, tels que deux changements d'attributs, arrivent généralement bien dans l'ordre.

Lorsque les clients lancent un jeu pour la première fois, certains aspects de la réplication et de l'exécution des scripts sont prévisibles :

  1. Le client charge le contenu de ReplicatedFirst, tel qu'un écran de chargement, des actifs et des scripts.

  2. Les LocalScripts (et Scripts avec un RunContext de Client) dans ReplicatedFirst s'exécutent. Ces scripts peuvent obtenir en toute sécurité des objets de ReplicatedFirst sans utiliser Instance:WaitForChild() :


    -- Sûr
    local ReplicatedFirst = game:GetService("ReplicatedFirst")
    local LoadingScreen = require(ReplicatedFirst.LoadingScreen)

    Ces scripts ne peuvent pas obtenir en toute sécurité des objets d'autres services, car ils pourraient ne pas encore être chargés :


    -- Pas sûr
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local PickupManager = require(ReplicatedStorage.PickupManager)

    Vous pouvez utiliser WaitForChild() dans ces scripts pour obtenir des objets d'autres services, mais cela annule les avantages de l'utilisation de ReplicatedFirst.

  3. Le client continue de charger le reste du jeu.

  4. Lorsqu'il a terminé, l'événement Loaded se déclenche et IsLoaded() retourne vrai.

  5. Les LocalScripts dans Players.[Player].PlayerScripts (copiés depuis StarterPlayerScripts) s'exécutent, ainsi que les clients Scripts dans ReplicatedStorage. Ces scripts peuvent obtenir en toute sécurité des objets de ReplicatedStorage sans utiliser WaitForChild().

  6. Le modèle Character du joueur apparaît dans le jeu.

  7. Les LocalScripts dans Workspace.[Character] (copiés depuis StarterCharacterScripts) s'exécutent.

Si votre jeu utilise le streaming d'instance (Workspace.StreamingEnabled), certains ou la plupart des objets pourraient ne pas avoir été chargés dans l'espace de travail, donc utiliser WaitForChild() pour accéder aux objets de l'espace de travail devient une mesure de sécurité encore plus importante. En particulier, voyez stream in et contrôles de streaming par modèle pour plus d'informations sur le chargement et le réglage du comportement de streaming.

Obtenir des objets

La première étape pour modifier les propriétés et attributs des objets est d'obtenir une référence à l'objet. La solution la plus simple est de faire en sorte que le script soit un enfant de l'objet dans l'Explorateur et d'utiliser script.Parent pour référencer l'objet.

Un script parenté à un modèle dans l'Explorateur.

local sign = script.Parent

La solution plus universelle est d'obtenir l'objet depuis un service en utilisant des méthodes comme Instance:FindFirstChild() ou Instance:WaitForChild().

Un Modèle dans un Dossier dans ReplicatedStorage.

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local signsFolder = ReplicatedStorage:WaitForChild("Signs")
local sign = signsFolder:WaitForChild("InteractiveSign")

Modifier des propriétés

Les propriétés sont faciles d'accès — utilisez simplement un . après la référence de l'objet — bien que si vous travaillez avec un modèle, vous pourriez avoir besoin de choisir une pièce individuelle plutôt que le modèle lui-même.

Un Modèle dans ReplicatedStorage.

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local chair = ReplicatedStorage:WaitForChild("Chair")
chair.LeftArmRest.Size = Vector3.new(10, 1, 10)

Créer des attributs

Bien que vous puissiez créer des attributs par programme, la solution plus courante est de les créer avec des valeurs par défaut dans l'interface utilisateur de Studio. Ensuite, vous pouvez utiliser des scripts pour modifier leurs valeurs en réponse aux actions des joueurs.

Un script dans un dossier dans ReplicatedStorage.

Pour des informations sur la création d'attributs dans Studio, consultez les attributs d'instance.

Définir des attributs

Pour modifier la valeur d'un attribut, appelez Instance:SetAttribute() avec un nom et une valeur.

Créer ou Modifier un Attribut

local cabbage = script.Parent
cabbage:SetAttribute("Harvestable", true)

Si l'attribut n'existe pas déjà, cette méthode le crée.

Obtenir les valeurs d'attributs

Pour obtenir la valeur d'un attribut existant, appelez Instance:GetAttribute() sur l'instance.

Obtenir la Valeur de l'Attribut

local cabbage = script.Parent
cabbage:SetAttribute("Harvestable", true)
local isHarvestable = cabbage:GetAttribute("Harvestable")
print(isHarvestable) --> true

De même, vous pouvez obtenir tous les attributs en appelant Instance:GetAttributes(). Cette méthode retourne un dictionnaire de paires clé-valeur.

Obtenir Tous les Attributs

local cabbage = script.Parent
local cabbageAttributes = cabbage:GetAttributes()
print(cabbageAttributes.GrowthRate) --> 2
for k, v in cabbageAttributes do
print(k, v)
end

Supprimer des attributs

Pour supprimer un attribut, définissez sa valeur sur nil.

Supprimer un Attribut

local cabbage = script.Parent
cabbage:SetAttribute("GrowthRate", nil)

Détecter des changements

Il existe plusieurs façons d'écouter les changements de propriétés et d'attributs :

En raison des informations minimales que ces événements et méthodes passent en tant que paramètres, tous sont bien adaptés aux fonctions anonymes, en particulier Instance:GetPropertyChangedSignal() et Instance:GetAttributeChangedSignal(). Pour en savoir plus sur les fonctions anonymes et la gestion des événements, consultez Événements.

Écouter les Changements

local cabbage = script.Parent
-- Fonctions locales
local function onAnyPropertyChange(property)
-- Ignorer les changements d'attributs
if property ~= "Attributes" then
print(property) --> Nom
print(cabbage[property]) --> Cabbage1
end
end
local function onAnyAttributeChange(attribute)
print(attribute) --> Grow, GrowthRate
print(cabbage:GetAttribute(attribute)) --> false, 3
end
-- Écouter les changements et se connecter aux fonctions locales
cabbage.Changed:Connect(onAnyPropertyChange)
cabbage.AttributeChanged:Connect(onAnyAttributeChange)
-- Écouter les changements et se connecter à des fonctions anonymes
cabbage:GetPropertyChangedSignal("Name"):Connect(function()
print(cabbage.Name) --> Cabbage1
end)
cabbage:GetAttributeChangedSignal("GrowthRate"):Connect(function()
print(cabbage:GetAttribute("GrowthRate")) --> 3
end)
-- Déclenche Changed et GetPropertyChangedSignal()
cabbage.Name = "Cabbage1"
-- Déclenche Changed et AttributeChanged
cabbage:SetAttribute("Grow", false)
-- Déclenche Changed, AttributeChanged et GetAttributeChangedSignal()
cabbage:SetAttribute("GrowthRate", 3)
©2026 Société Roblox. Roblox, le logo Roblox et Powering Imagination font partie de nos marques déposées aux États-Unis et dans d'autres pays.