Catégories
Jeu vidéo ROBLOX ROBLOX-NIVEAU01

Jeu de piste avec des messages personnalisés

  • 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 GetDescendants pour trouver tous les ClickDetector dans un dossier, même s’ils sont imbriqués.

Concepts clés :

  1. GetDescendants : Récupérer tous les objets enfants (y compris les enfants des enfants, etc.).
  2. GetAttribute : Lire une donnée personnalisée stockée sur un objet (ex: un message).
  3. ClickDetector : Détecter quand un joueur clique sur un objet.
  4. 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 :

  1. Créer un dossier :
    • Dans Workspace, crée un dossier nommé MessagesFolder.
  2. Ajouter des Part :
    • Ajoute plusieurs Part dans MessagesFolder.
    • Pour chaque Part :
      • Ajoute un attribut Message (de type String) avec un texte différent (ex: "Bonjour !", "Salut !", "Hello !").
      • Ajoute un ClickDetector comme enfant de la Part (clic droit sur la PartInsert ObjectClickDetector).
  3. Ajouter le script :
    • Crée un Script dans ServerScriptService et copie-y le code fourni.
  4. 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.

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 folder contient 3 Part et que chaque Part contient un ClickDetector, folder:GetChildren() ne retournera que les 3 Part (pas les ClickDetector).
  • GetDescendants :
    • Récupère tous les descendants (enfants, petits-enfants, etc.) d’un objet.
    • Exemple : Avec la même structure, folder:GetDescendants() retournera les 3 Part et les 3 ClickDetector.
    • 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 GetDescendants pour trouver tous les ClickDetector dans MessagesFolder, peu importe où ils sont placés.
  • Comparaison : Méthode Profondeur Exemple d’utilisation GetChildren 1 niveau Récupérer les Part directement dans folder. GetDescendants Tous niveaux Trouver tous les ClickDetector dans folder.

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 Message sur une Part pour savoir quel texte afficher quand un joueur clique dessus.
  • 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 :
      1. Sélectionne une Part.
      2. Dans les propriétés, cherche la section Attributes.
      3. Ajoute un nouvel attribut (ex: Message de type String) et donne-lui une valeur (ex: "Bonjour !").
  • Dans le script :
    • part:GetAttribute("Message") récupère la valeur de l’attribut Message de la Part.
    • Si l’attribut n’existe pas, GetAttribute retourne nil.

3. Le fonctionnement du ClickDetector

  • Qu’est-ce qu’un ClickDetector ?
    • Un objet invisible qui détecte les clics de souris sur une Part ou un Model.
    • Il doit être enfant de la Part ou du Model que tu veux rendre cliquable.
  • Comment ça marche ?
    • Quand un joueur clique sur une Part contenant un ClickDetector, l’événement MouseClick est déclenché.
    • On peut connecter une fonction à cet événement pour exécuter du code quand le joueur clique.
  • Exemple dans le script :luaCopierclickDetector.MouseClick:Connect(function(player) -- Code exécuté quand un joueur clique sur la partie print(player.Name .. " a cliqué !") end)
    • player est 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 Part bouge ou tourne.

4. Afficher un message dans le chat

  • Chat:Chat(head, message) :
    • Affiche une bulle de chat au-dessus de la Head du personnage.
    • head : La partie Head du personnage (où la bulle apparaîtra).
    • message : Le texte à afficher (ex: "Bonjour !").
  • Exemple dans le script :luaCopierChat:Chat(head, player.Name .. " " .. message)
    • Affiche un message comme : "Joueur1 Bonjour !".

À toi de jouer !

  1. Modifie les messages :
    • Change les valeurs des attributs Message sur tes Part et observe le résultat.
  2. Ajoute des objets imbriqués :
    • Crée un Model dans MessagesFolder, puis ajoute une Part avec un ClickDetector et un attribut Message à l’intérieur du Model.
    • Vérifie que le script fonctionne toujours (grâce à GetDescendants !).
  3. 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 :

  1. Quelle méthode permet de récupérer tous les objets, même imbriqués, dans un dossier ?
    • a) GetChildren
    • b) GetDescendants
    • c) GetAll
  2. Si folder contient une Part qui contient un ClickDetector, que retourne folder:GetChildren() ?
    • a) La Part et le ClickDetector.
    • b) Seulement la Part.
    • c) Seulement le ClickDetector.
  3. Pourquoi utilise-t-on GetDescendants dans ce script ?
    • a) Pour trouver tous les ClickDetector, même s’ils sont dans des Model imbriqués.
    • b) Pour supprimer les objets.
    • c) Pour changer la couleur des objets.

Sur les attributs (GetAttribute) :

  1. À quoi sert part:GetAttribute("Message") ?
    • a) À récupérer la valeur de l’attribut Message de la Part.
    • b) À supprimer l’attribut Message.
    • c) À créer un nouvel attribut.
  2. Où peut-on ajouter un attribut à une Part dans Roblox Studio ?
    • a) Dans la section Attributes des propriétés.
    • b) Dans la section Script.
    • c) Dans la section Model.
  3. Que retourne GetAttribute si l’attribut n’existe pas ?
    • a) nil
    • b) 0
    • c) Une erreur.

Sur le ClickDetector :

  1. 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.
  2. Où doit-on placer un ClickDetector pour qu’il fonctionne ?
    • a) Comme enfant d’une Part ou d’un Model.
    • b) Dans Workspace.
    • c) Dans ServerScriptService.
  3. 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.

Sur le chat :

  1. À 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

ConceptExplicationExemple dans le script
GetDescendantsRécupère tous les descendants d’un objet (enfants, petits-enfants, etc.).folder:GetDescendants()
AttributsDonnées personnalisées stockées sur un objet.part:GetAttribute("Message")
ClickDetectorDétecte les clics sur une Part ou un Model.clickDetector.MouseClick:Connect(...)
Chat:ChatAffiche une bulle de chat au-dessus de la tête d’un personnage.Chat:Chat(head, message)
Boucles forParcourt une liste d’objets.for _, clickDetector in ipairs(...) do
ConditionsExécute du code si une condition est vraie.if not clickDetector:IsA("ClickDetector") then continue end

Question pour l’enseignant :