← Retour LearnBloxLearnBlox

Événements & Instances

Modules 7–8

Un jeu Roblox réagit en permanence : un joueur touche une zone, clique un bouton, rejoint la partie. Ces réactions reposent sur les événements (.Touched, .MouseClick, PlayerAdded…) que tu connectes à des fonctions. Les instances, elles, sont tous les objets de ton jeu : Parts, Models, Scripts — créables et manipulables par code avec Instance.new().

Le principe est toujours le même : tu écoutes un événement avec :Connect(), et la fonction associée s'exécute à chaque déclenchement. Bien gérer la connexion (et la déconnexion) des événements évite les fuites mémoire et les bugs où une action se déclenche plusieurs fois.

⚡ Touched & TouchEnded
local part = script.Parent
local debounce = false

part.Touched:Connect(function(hit)
    if debounce then return end
    local perso = hit.Parent
    if perso:FindFirstChild("Humanoid") then
        debounce = true
        print(perso.Name .. " touche !")
        task.wait(1)
        debounce = false
    end
end)
⚠️ Toujours utiliser un debounce — Touched se déclenche plusieurs fois par seconde !
🖱️ ClickDetector & ProximityPrompt
-- ClickDetector (clic souris)
local cd = script.Parent:FindFirstChild("ClickDetector")
cd.MouseClick:Connect(function(plr)
    print(plr.Name .. " a cliqué !")
end)

-- ProximityPrompt (touche E)
local pp = script.Parent:FindFirstChild("ProximityPrompt")
pp.ActionText = "Ouvrir"
pp.Triggered:Connect(function(plr)
    print(plr.Name .. " a interagi !")
end)
👤 PlayerAdded & Removing
local Players = game:GetService("Players")

Players.PlayerAdded:Connect(function(plr)
    print(plr.Name .. " a rejoint !")

    plr.CharacterAdded:Connect(function(char)
        print(plr.Name .. " spawné !")
    end)
end)

Players.PlayerRemoving:Connect(function(plr)
    print(plr.Name .. " est parti")
end)
🧱 Instance.new()
-- Créer une Part
local part = Instance.new("Part")
part.Size       = Vector3.new(4, 1, 4)
part.Position   = Vector3.new(0, 5, 0)
part.Anchored   = true
part.BrickColor = BrickColor.new("Bright red")
part.Material   = Enum.Material.SmoothPlastic
part.Parent     = workspace  -- TOUJOURS en dernier

-- Créer un dossier
local dossier = Instance.new("Folder")
dossier.Name   = "MonDossier"
dossier.Parent = workspace
🎨 CFrame & Color3
-- CFrame : position + rotation
part.CFrame = CFrame.new(10, 2, 5)
part.CFrame = CFrame.new(part.Position)
    * CFrame.Angles(0, math.rad(45), 0)

-- Color3 (RGB normalisé 0-1)
part.Color = Color3.new(1, 0, 0)           -- rouge
part.Color = Color3.fromRGB(255, 165, 0)    -- orange
part.Color = Color3.fromHex("#3b82f6")      -- hex
📦 Clone & Destroy
-- Cloner un objet existant
local modele = workspace.MonModele
local copie  = modele:Clone()
copie.Parent = workspace

-- Déplacer le clone
copie:SetPrimaryPartCFrame(
    CFrame.new(10, 0, 0)
)

-- Détruire après 5 secondes
game:GetService("Debris"):AddItem(copie, 5)

-- Détruire immédiatement
copie:Destroy()
🔍 FindFirstChild & WaitForChild
-- FindFirstChild : retourne nil si absent (pas d'erreur)
local brique = workspace:FindFirstChild("MaBrique")
if brique then print("Trouvée !") end

-- WaitForChild : attend que l'objet existe (utile côté client)
local brique = workspace:WaitForChild("MaBrique")       -- attend indéfiniment
local brique = workspace:WaitForChild("MaBrique", 5)    -- timeout 5s

-- FindFirstChildOfClass : cherche par type
local hum = character:FindFirstChildOfClass("Humanoid")

-- IsA : vérifie le type d'une instance
if hit:IsA("BasePart") then print("C'est une Part !") end
✅ Bonnes pratiques & erreurs fréquentes
  • Garde une référence à tes connexions (local c = event:Connect(...)) pour pouvoir les déconnecter avec c:Disconnect() quand elles ne servent plus.
  • Configure une instance AVANT de définir son Parent : Roblox ne calcule l'affichage qu'une fois parentée, c'est plus performant.
  • Protège tes .Touched avec un debounce : sans ça, l'événement se déclenche des dizaines de fois pendant qu'un objet reste en contact.
  • Vérifie ce que tu touches : un .Touched se déclenche pour n'importe quoi (jambe du joueur, autre Part). Teste hit.Name ou la présence d'un Humanoid.