En cliquant sur des objets
- Créer des objets (ex: des
Part) dans un dossier (MessagesFolder). - Chaque objet a un message personnalisé stocké dans un attribut (
Message). - Quand un joueur clique sur un objet, son personnage affiche le message dans une bulle de chat au-dessus de sa tête.
Comprendre le but du script
But :
- Permettre aux joueurs de cliquer sur des objets pour afficher des messages personnalisés.
- Utiliser les attributs pour stocker des données (ici, le message) directement sur les objets.
- Utiliser
GetDescendantspour trouver tous lesClickDetectordans un dossier, même s’ils sont imbriqués.
Concepts clés :
GetDescendants: Récupérer tous les objets enfants (y compris les enfants des enfants, etc.).GetAttribute: Lire une donnée personnalisée stockée sur un objet (ex: un message).ClickDetector: Détecter quand un joueur clique sur un objet.Chat:Chat(): Afficher un message dans une bulle de chat au-dessus de la tête du joueur.
Préparer le jeu dans Roblox Studio
Pour tester le script, suis ces étapes :
- Créer un dossier :
- Dans
Workspace, crée un dossier nomméMessagesFolder.
- Dans
- Ajouter des
Part:- Ajoute plusieurs
PartdansMessagesFolder. - Pour chaque
Part:- Ajoute un attribut
Message(de typeString) avec un texte différent (ex:"Bonjour !","Salut !","Hello !"). - Ajoute un
ClickDetectorcomme enfant de laPart(clic droit sur laPart→ Insert Object → ClickDetector).
- Ajoute un attribut
- Ajoute plusieurs
- Ajouter le script :
- Crée un
ScriptdansServerScriptServiceet copie-y le code fourni.
- Crée un
- Tester le jeu :
- Lance le jeu et clique sur les
Part:- Une bulle de chat devrait apparaître au-dessus de la tête de ton personnage avec le message stocké dans l’attribut.
- Lance le jeu et clique sur les

Comment créer un attribut pour un message personnalisé :


Le script :
Voici le script commenté pour comprendre chaque partie :
-- Récupérer le service de chat de Roblox
local Chat = game:GetService("Chat")
-- Récupérer le dossier contenant les objets cliquables
local folder = workspace:WaitForChild("MessagesFolder")
-- Parcourir TOUS les descendants du dossier (y compris les enfants des enfants, etc.)
for _, clickDetector in ipairs(folder:GetDescendants()) do
-- Vérifier si l'objet actuel est un ClickDetector
if not clickDetector:IsA("ClickDetector") then continue end
-- Récupérer la partie (Part) parente du ClickDetector
local part = clickDetector.Parent
-- Récupérer le message stocké dans l'attribut "Message" de la partie
local message = part and part:GetAttribute("Message")
-- Si la partie n'a pas d'attribut "Message", on passe à l'itération suivante
if not message then continue end
-- Connecter une fonction au clic du ClickDetector
clickDetector.MouseClick:Connect(function(player)
-- Récupérer le personnage du joueur (attendre qu'il existe si nécessaire)
local character = player.Character or player.CharacterAdded:Wait()
-- Trouver la tête du personnage
local head = character:FindFirstChild("Head")
if not head then return end -- Si pas de tête, on arrête
-- Afficher le message dans une bulle de chat au-dessus de la tête
Chat:Chat(head, player.Name .. " " .. message)
end)
end
Explications détaillées
1. La puissance de GetChildren et GetDescendants
GetChildren:- Récupère uniquement les enfants directs d’un objet.
- Exemple : Si
foldercontient 3Partet que chaquePartcontient unClickDetector,folder:GetChildren()ne retournera que les 3Part(pas lesClickDetector).
GetDescendants:- Récupère tous les descendants (enfants, petits-enfants, etc.) d’un objet.
- Exemple : Avec la même structure,
folder:GetDescendants()retournera les 3Partet les 3ClickDetector. - Pourquoi c’est puissant ?
- On peut trouver tous les objets d’un certain type (ex: tous les
ClickDetector) même s’ils sont imbriqués profondément dans la hiérarchie. - Dans ce script, on utilise
GetDescendantspour trouver tous lesClickDetectordansMessagesFolder, peu importe où ils sont placés.
- On peut trouver tous les objets d’un certain type (ex: tous les
- Comparaison : Méthode Profondeur Exemple d’utilisation
GetChildren1 niveau Récupérer lesPartdirectement dansfolder.GetDescendantsTous niveaux Trouver tous lesClickDetectordansfolder.
2. L’utilité des attributs (GetAttribute)
- Qu’est-ce qu’un attribut ?
- Un attribut est une donnée personnalisée que tu peux attacher à un objet Roblox (ex: une
Part). - Exemple : Tu peux stocker un
Messagesur unePartpour savoir quel texte afficher quand un joueur clique dessus.
- Un attribut est une donnée personnalisée que tu peux attacher à un objet Roblox (ex: une
- Pourquoi utiliser des attributs ?
- Flexibilité : Tu peux stocker n’importe quelle donnée (texte, nombre, booléen) directement sur un objet.
- Organisation : Pas besoin de créer des variables globales ou des tableaux pour associer des données à des objets.
- Performance : Les attributs sont optimisés pour être lus et modifiés rapidement.
- Comment ajouter un attribut à une
Part?- Dans Roblox Studio :
- Sélectionne une
Part. - Dans les propriétés, cherche la section Attributes.
- Ajoute un nouvel attribut (ex:
Messagede typeString) et donne-lui une valeur (ex:"Bonjour !").
- Sélectionne une
- Dans Roblox Studio :
- Dans le script :
part:GetAttribute("Message")récupère la valeur de l’attributMessagede laPart.- Si l’attribut n’existe pas,
GetAttributeretournenil.
3. Le fonctionnement du ClickDetector
- Qu’est-ce qu’un
ClickDetector?- Un objet invisible qui détecte les clics de souris sur une
Partou unModel. - Il doit être enfant de la
Partou duModelque tu veux rendre cliquable.
- Un objet invisible qui détecte les clics de souris sur une
- Comment ça marche ?
- Quand un joueur clique sur une
Partcontenant unClickDetector, l’événementMouseClickest déclenché. - On peut connecter une fonction à cet événement pour exécuter du code quand le joueur clique.
- Quand un joueur clique sur une
- Exemple dans le script :luaCopier
clickDetector.MouseClick:Connect(function(player) -- Code exécuté quand un joueur clique sur la partie print(player.Name .. " a cliqué !") end)playerest le joueur qui a cliqué.- La fonction est appelée automatiquement quand un clic est détecté.
- Pourquoi utiliser
ClickDetector?- Simplicité : Pas besoin de gérer manuellement les clics avec des calculs de position.
- Précision : Roblox gère automatiquement la détection des clics, même si la
Partbouge ou tourne.
4. Afficher un message dans le chat
Chat:Chat(head, message):- Affiche une bulle de chat au-dessus de la
Headdu personnage. head: La partieHeaddu personnage (où la bulle apparaîtra).message: Le texte à afficher (ex:"Bonjour !").
- Affiche une bulle de chat au-dessus de la
- Exemple dans le script :luaCopier
Chat:Chat(head, player.Name .. " " .. message)- Affiche un message comme :
"Joueur1 Bonjour !".
- Affiche un message comme :
À toi de jouer !
- Modifie les messages :
- Change les valeurs des attributs
Messagesur tesPartet observe le résultat.
- Change les valeurs des attributs
- Ajoute des objets imbriqués :
- Crée un
ModeldansMessagesFolder, puis ajoute unePartavec unClickDetectoret un attributMessageà l’intérieur duModel. - Vérifie que le script fonctionne toujours (grâce à
GetDescendants!).
- Crée un
- Teste avec plusieurs joueurs :
- Ouvre deux fenêtres de test et vérifie que chaque joueur voit ses propres messages.
QCM pour vérifier la compréhension
Sur GetChildren et GetDescendants :
- Quelle méthode permet de récupérer tous les objets, même imbriqués, dans un dossier ?
- a)
GetChildren - b)
GetDescendants - c)
GetAll
- a)
- Si
foldercontient unePartqui contient unClickDetector, que retournefolder:GetChildren()?- a) La
Partet leClickDetector. - b) Seulement la
Part. - c) Seulement le
ClickDetector.
- a) La
- Pourquoi utilise-t-on
GetDescendantsdans ce script ?- a) Pour trouver tous les
ClickDetector, même s’ils sont dans desModelimbriqués. - b) Pour supprimer les objets.
- c) Pour changer la couleur des objets.
- a) Pour trouver tous les
Sur les attributs (GetAttribute) :
- À quoi sert
part:GetAttribute("Message")?- a) À récupérer la valeur de l’attribut
Messagede laPart. - b) À supprimer l’attribut
Message. - c) À créer un nouvel attribut.
- a) À récupérer la valeur de l’attribut
- Où peut-on ajouter un attribut à une
Partdans Roblox Studio ?- a) Dans la section Attributes des propriétés.
- b) Dans la section Script.
- c) Dans la section Model.
- Que retourne
GetAttributesi l’attribut n’existe pas ?- a)
nil - b)
0 - c) Une erreur.
- a)
Sur le ClickDetector :
- Qu’est-ce qu’un
ClickDetector?- a) Un objet qui détecte les clics sur une
Part. - b) Un objet qui change la couleur d’une
Part. - c) Un objet qui joue un son.
- a) Un objet qui détecte les clics sur une
- Où doit-on placer un
ClickDetectorpour qu’il fonctionne ?- a) Comme enfant d’une
Partou d’unModel. - b) Dans
Workspace. - c) Dans
ServerScriptService.
- a) Comme enfant d’une
- Que fait
clickDetector.MouseClick:Connect(function(player) ... end)?- a) Exécute une fonction quand un joueur clique sur la
Part. - b) Supprime le
ClickDetector. - c) Change la taille de la
Part.
- a) Exécute une fonction quand un joueur clique sur la
Sur le chat :
- À quoi sert
Chat:Chat(head, message)?- a) À afficher une bulle de chat au-dessus de la tête du personnage.
- b) À envoyer un message dans le chat global.
- c) À supprimer le personnage.
Résumé des concepts appris
| Concept | Explication | Exemple dans le script |
|---|---|---|
GetDescendants | Récupère tous les descendants d’un objet (enfants, petits-enfants, etc.). | folder:GetDescendants() |
| Attributs | Données personnalisées stockées sur un objet. | part:GetAttribute("Message") |
ClickDetector | Détecte les clics sur une Part ou un Model. | clickDetector.MouseClick:Connect(...) |
Chat:Chat | Affiche une bulle de chat au-dessus de la tête d’un personnage. | Chat:Chat(head, message) |
Boucles for | Parcourt une liste d’objets. | for _, clickDetector in ipairs(...) do |
| Conditions | Exécute du code si une condition est vraie. | if not clickDetector:IsA("ClickDetector") then continue end |
Question pour l’enseignant :
