Créer un mécanisme de collecte de pièces

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


Maintenant que vous avez un monde 3D, il est temps d'ajouter votre premier script. Dans cette section, vous allez créer un mécanisme de collecte de pièces qui permet aux joueurs de collecter des pièces et désactive temporairement les pièces après qu'elles aient été collectées.

Créer les pièces

Avant de pouvoir écrire un script, vous devez avoir des objets de remplacement dans le monde à utiliser comme vos pièces. Comme les plateformes de tas de mer que vous avez créées dans la section précédente, les pièces peuvent être de simples objets Part.

Créer les pièces

Dans Workspace > World, créez un nouveau dossier nommé Coins.
À l'intérieur du dossier Coins, créez une pièce cylindrique nommée Coin avec BrickColor défini sur Gold, Material défini sur Metal, Size 0.6, 8, 4, et Orientation 90, 0, 0.
Désactivez CanCollide et activez Anchored.
Dupliquez ensuite la pièce Coin plusieurs fois et éparpillez les duplicatas autour de l'île et sur les plateformes afin qu'ils soient accessibles depuis les niveaux de tas de mer.
Gardez chaque duplicata nommé Coin.

Créer le script

Ensuite, vous allez faire en sorte que les pièces réagissent aux joueurs. Le moteur Roblox peut détecter quand quelque chose touche une pièce, mais vous devez utiliser un script pour définir comment la pièce doit réagir.

Créer CoinService

Dans ServerScriptService, créez un Script nommé CoinService avec le code suivant :
```lua
-- Initialisation des services et des variables
local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local coinsFolder = Workspace.World.Coins
local coins = coinsFolder:GetChildren()
local COOLDOWN = 10
-- Définition de la fonction de gestion des événements
local function onCoinTouched(otherPart, coin)
if coin:GetAttribute("Enabled") then
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
-- Le joueur a touché une pièce
coin.Transparency = 1
coin:SetAttribute("Enabled", false)
print("Le joueur a collecté une pièce")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end
-- Configuration des écouteurs d'événements
for _, coin in coins do
coin:SetAttribute("Enabled", true)
coin.Touched:Connect(function(otherPart)
onCoinTouched(otherPart, coin)
end)
end
```

Maintenant, chaque fois qu'un joueur touche une pièce, la pièce disparaît pendant 10 secondes, et le journal de sortie affiche Le joueur a collecté une pièce.

Les sections suivantes décrivent plus en détail le fonctionnement du script.

Initialiser les services et les variables

Comme avec beaucoup de code que vous avez probablement écrit dans d'autres langages, vous définissez des variables dont vous avez besoin plus tard en haut du script. Notre code fait ce qui suit :

  • Obtenir des instances de services - Les services Roblox offrent une fonctionnalité intégrée pour des fonctionnalités courantes. Le script obtient d'abord des instances du service Workspace, qui contient chaque objet dans le monde 3D, et du service Player, qui gère et contient tous les joueurs connectés à votre jeu.
  • Obtenir des références à toutes les pièces - Le script interroge ensuite l'espace de travail 3D pour toutes les références aux objets pièces avec la méthode GetChildren(). Cette méthode renvoie un tableau contenant tout ce qui est enfanté à l'objet avec lequel elle est associée, qui dans ce cas est le dossier Workspace.World.Coins que vous avez créé précédemment.
  • Définit une variable globale - La variable COOLDOWN est utilisée plus tard pour définir combien de temps désactiver une pièce après qu'elle a été collectée.
Initialisation des services et des variables

local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local coinsFolder = Workspace.World.Coins
local coins = coinsFolder:GetChildren()
local COOLDOWN = 10
...

Définir la fonction de gestion des événements

Le moteur Roblox simule physiquement le monde 3D et gère une grande partie de la logique pour traiter les événements liés au rendu, à la physique et au réseau. Lorsque vous souhaitez écrire votre propre logique lors de certains de ces événements, vous pouvez les écouter et les gérer tout en laissant le moteur faire le reste. Dans ce cas, vous écoutez et gérez les événements liés aux pièces touchées. Le script définit la logique pour traiter cet événement dans la méthode onCoinTouched(), qui fait ce qui suit :

  • Détecte si la pièce est activée - Chaque Instance a un attribut booléen Enabled qui définit si l'objet existe ou non dans le monde 3D. Vous pouvez obtenir les attributs d'instance avec la méthode GetAttribute().
  • Détecte si un joueur a touché la pièce - Si une pièce est activée, la méthode utilise le service joueur pour vérifier si l'objet qui a touché la pièce était effectivement un joueur. Lorsqu'un événement de toucher se produit, le moteur Roblox passe l'objet qui a touché la pièce en tant que paramètre otherPart. Le script vérifie si le parent de otherPart appartient à un joueur.
  • Désactive la pièce si un joueur l'a touchée et la réactive après 10 secondes - Enfin, si un joueur a touché la pièce, la méthode désactive la pièce, attend 10 secondes, puis réactive la pièce pour la collecte. task.wait() est utilisé à la place de wait() car il offre de meilleures performances en ne suspendant pas complètement l'exécution du code, permettant aux tâches dans d'autres threads de s'exécuter en parallèle.
Définition de la fonction de gestion des événements

local function onCoinTouched(otherPart, coin)
if coin:GetAttribute("Enabled") then
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
-- Le joueur a touché une pièce
coin.Transparency = 1
coin:SetAttribute("Enabled", false)
print("Le joueur a collecté une pièce")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end

Connecter la fonction de gestion des événements

Tous les objets 3D simulés héritent de BasePart et ont donc un événement Touched(). La boucle suivante connecte le gestionnaire onTouchedEvent() à l'événement de toucher de chaque pièce en effectuant ce qui suit :

  • Parcourir toutes les pièces - Parcourez chacune des pièces en utilisant une itération générale.
  • Connecter le gestionnaire à l'événement - À chaque itération de la boucle, la pièce est activée par défaut, de sorte qu'elle soit visible dans le monde 3D pendant le début initial du jeu. La méthode de gestionnaire onCoinTouched() est également connectée à l'événement Touched de la pièce afin qu'elle s'exécute chaque fois que l'événement se produit. Lorsque le moteur détecte un toucher, il passe également l'objet qui a touché l'objet, otherPart.
Connexion de la fonction de gestion des événements

for _, coin in coins do
coin:SetAttribute("Enabled", true)
coin.Touched:Connect(function(otherPart)
onCoinTouched(otherPart, coin)
end)
end

Tester le mécanisme

Sélectionnez Test dans le menu déroulant et cliquez sur Jouer. Déplacez votre personnage pour toucher une pièce. Si tout fonctionne, la pièce disparaît, la fenêtre Sortie affiche Le joueur a collecté une pièce, et la pièce réapparaît 10 secondes plus tard.

La fenêtre de Sortie du Studio qui affiche la confirmation que le joueur a collecté une pièce.
©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.