← Retour LearnBloxLearnBlox

Faire bouger un objet par script

Guide débutant

Une porte qui s'ouvre en glissant, une plateforme qui monte et descend, une pièce qui tourne sur elle-même — tout ça repose sur un seul service : TweenService. Il anime une propriété d'un objet (position, taille, couleur, rotation) d'une valeur de départ à une valeur d'arrivée, en douceur.

C'est bien plus fiable que de bouger un objet manuellement dans une boucle : Tween gère la fluidité, la durée et le style d'accélération pour toi.

🚪 Exemple simple : une porte qui glisse
local TweenService = game:GetService("TweenService")
local porte = workspace.Porte

local info = TweenInfo.new(
    1,                          -- durée en secondes
    Enum.EasingStyle.Quad,      -- style d'accélération
    Enum.EasingDirection.Out
)

local positionOuverte = { Position = porte.Position + Vector3.new(0, 10, 0) }
local tween = TweenService:Create(porte, info, positionOuverte)

tween:Play()
💡 TweenService:Create ne modifie rien tant que :Play() n'est pas appelé — tu peux préparer plusieurs animations à l'avance.
🔼🔽 Plateforme qui monte et descend en boucle
local plateforme = workspace.Plateforme
local positionBasse = plateforme.Position
local positionHaute = positionBasse + Vector3.new(0, 8, 0)

local info = TweenInfo.new(
    2, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut,
    -1,     -- -1 = répétition infinie
    true    -- true = fait l'aller-retour automatiquement
)

local tween = TweenService:Create(plateforme, info, { Position = positionHaute })
tween:Play()
🔄 Rotation continue
local objet = workspace.PieceRotative

local info = TweenInfo.new(3, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, -1)
local tween = TweenService:Create(objet, info, {
    CFrame = objet.CFrame * CFrame.Angles(0, math.rad(360), 0)
})
tween:Play()
⚠️ Une rotation Tween s'arrête à l'angle final (360°) — pour une rotation vraiment infinie et fluide, préfère une boucle avec RunService.Heartbeat.
🎬 Réagir à la fin de l'animation
local tween = TweenService:Create(porte, info, { Transparency = 1 })

tween.Completed:Connect(function()
    print("Animation terminée !")
    porte.CanCollide = false -- laisse passer une fois disparue
end)

tween:Play()
✅ Bonnes pratiques & erreurs fréquentes
  • Tween anime des propriétés numériques (Position, Size, Transparency, Color) — pas de logique de jeu à l'intérieur, seulement des valeurs.
  • Une seule instance de TweenInfo suffit pour plusieurs Tweens similaires : pas besoin d'en recréer une à chaque appel.
  • Attention aux Tweens infinis (-1) : ils tournent tant que le jeu existe — pense à les arrêter (tween:Cancel()) si l'objet est détruit.
  • Pour une porte, désactive CanCollide une fois ouverte, sinon le joueur reste bloqué par une collision invisible malgré l'animation.

Va plus loin : TweenService en détail

Ce guide couvre les cas les plus fréquents. Le module TweenService et Animations approfondit les styles d'accélération, les séquences d'animations enchaînées et les exercices pratiques corrigés.

Voir le module gratuitement →