Un checkpoint qui s'active, une pièce à ramasser, un piège qui inflige des dégâts : toutes ces mécaniques reposent sur une seule question — comment savoir qu'un joueur touche un objet ? La réponse s'appelle l'événement Touched.
C'est simple à utiliser, mais plein de pièges classiques : il se déclenche pour tout ce qui touche l'objet (pas seulement les joueurs), et parfois plusieurs fois de suite en une fraction de seconde. Ce guide montre le code correct dès le départ.
local piece = workspace.Piece -- une Part dans le jeu
piece.Touched:Connect(function(hit)
print(hit.Name .. " a touché la pièce")
end)hit est n'importe quelle Part qui touche l'objet — un bras, une jambe, une balle, un NPC. Ce n'est jamais directement le joueur.local Players = game:GetService("Players")
local piece = workspace.Piece
piece.Touched:Connect(function(hit)
local personnage = hit.Parent
local joueur = Players:GetPlayerFromCharacter(personnage)
if not joueur then return end -- pas un joueur, on ignore
print(joueur.Name .. " a ramassé la pièce !")
piece:Destroy()
end)local dejaDeclenche = false
piece.Touched:Connect(function(hit)
local joueur = Players:GetPlayerFromCharacter(hit.Parent)
if not joueur or dejaDeclenche then return end
dejaDeclenche = true
-- Ta logique ici (donner des points, téléporter…)
task.wait(1) -- petite pause avant de réactiver
dejaDeclenche = false
end)Touched peut se déclencher plusieurs fois par seconde tant que le joueur reste en contact — un verrou (comme dejaDeclenche) évite de donner 10 points au lieu d'1.local zoneDanger = workspace.ZoneDanger
local enCooldown = {} -- une table par joueur touché
zoneDanger.Touched:Connect(function(hit)
local joueur = Players:GetPlayerFromCharacter(hit.Parent)
if not joueur or enCooldown[joueur] then return end
local humanoid = hit.Parent:FindFirstChild("Humanoid")
if humanoid then
humanoid:TakeDamage(10)
enCooldown[joueur] = true
task.wait(1)
enCooldown[joueur] = nil
end
end)GetPlayerFromCharacter : un Touched non filtré réagit à des NPC, des projectiles, du décor qui bouge.piece:Destroy()), sinon il reste ramassable par le joueur suivant.Touched n'est qu'un événement parmi beaucoup d'autres. Le module Événements et Listeners couvre Connect, PlayerAdded, les BindableEvents et comment structurer ton code autour des événements.