Comprendre comment utiliser TweenService pour animer une partie (Part) dans Roblox, en changeant sa transparence, sa couleur, et ses propriétés physiques (comme CanCollide et CanTouch).

-- Récupérer le dossier et la partie "PowerPart" dans le Workspace
local powersFolder = workspace:WaitForChild("PowersFolder")
local powerPart = powersFolder:WaitForChild("PowerPart")
-- Variable pour contrôler l'exécution de la boucle (non utilisée ici, mais utile pour arrêter le script si besoin)
local isPowerActive = true
local POWER_DURATION = 5 -- Durée de l'animation "power" (en secondes)
local MAX_WITHOUT_POWER_DURATION = 10 -- Durée maximale entre deux activations (en secondes)
local MIN_WITHOUT_POWER_DURATION = 3 -- Durée minimale entre deux activations (en secondes)
-- Boucle infinie pour activer l'animation aléatoirement
task.spawn(function()
while isPowerActive do
-- Attendre un temps aléatoire entre MIN_WITHOUT_POWER_DURATION et MAX_WITHOUT_POWER_DURATION
task.wait(math.random(MIN_WITHOUT_POWER_DURATION, MAX_WITHOUT_POWER_DURATION))
-- Inverser les propriétés CanCollide et CanTouch
powerPart.CanCollide = not powerPart.CanCollide
powerPart.CanTouch = not powerPart.CanCollide
-- Attendre que l'animation soit terminée
task.wait(POWER_DURATION)
-- Réactiver les collisions et le toucher
powerPart.CanCollide = not powerPart.CanCollide
powerPart.CanTouch = not powerPart.CanCollide
end
end)
-- Détecter quand un joueur touche la partie
powerPart.Touched:Connect(function(hit)
print("La partie PowerPart a été touchée !")
end)
Boucle infinie pour activer l’animation aléatoirement
task.spawn(function() ... end): Crée une nouvelle tâche (thread) pour exécuter la boucle sans bloquer le reste du script.while isPowerActive do ... end: Boucle infinie (tant queisPowerActiveesttrue).task.wait(math.random(MIN_WITHOUT_POWER_DURATION, MAX_WITHOUT_POWER_DURATION)):- Attend un temps aléatoire entre
MIN_WITHOUT_POWER_DURATION(3 secondes) etMAX_WITHOUT_POWER_DURATION(10 secondes).
- Attend un temps aléatoire entre
powerPart.CanCollide = not powerPart.CanCollide:- Inverse la valeur de
CanCollide(si c’étaittrue, ça devientfalse, et vice versa).
- Inverse la valeur de
task.wait(POWER_DURATION): Temps d’action du pouvoir- Réactivation des propriétés :
- Après la fin de l’animation, on réactive
CanCollideetCanTouch.
- Après la fin de l’animation, on réactive
Ajouter dans cette partie de code le pouvoir à donner au joueur :
-- Détecter quand un joueur touche la partie
powerPart.Touched:Connect(function(hit)
print("La partie PowerPart a été touchée !")
end)
Création de l’animation avec TweenService
La part change de couleur lorsque le pouvoir est possible :
-- Récupérer le dossier et la partie "PowerPart" dans le Workspace
local powersFolder = workspace:WaitForChild("PowersFolder")
local powerPart = powersFolder:WaitForChild("PowerPart")
-- Variable pour contrôler l'exécution de la boucle (non utilisée ici, mais utile pour arrêter le script si besoin)
local isPowerActive = true
-- Service pour créer des animations fluides
local TweenService = game:GetService("TweenService")
-- Durées et couleurs pour les animations
local POWER_DURATION = 5 -- Durée de l'animation "power" (en secondes)
local MAX_WITHOUT_POWER_DURATION = 10 -- Durée maximale entre deux activations (en secondes)
local MIN_WITHOUT_POWER_DURATION = 3 -- Durée minimale entre deux activations (en secondes)
local POWER_COLOR = Color3.fromRGB(0, 255, 0) -- Couleur verte pour l'état "power"
local NO_POWER_COLOR = Color3.fromRGB(255, 0, 0) -- Couleur rouge pour l'état "sans power"
-- Configurer la partie "PowerPart"
powerPart.Anchored = true -- Empêcher la partie de bouger
powerPart.Transparency = 0 -- Rendre la partie complètement opaque
powerPart.CanCollide = true -- Permettre les collisions avec la partie
powerPart.CanTouch = true -- Permettre de détecter les touches sur la partie
powerPart.Color = NO_POWER_COLOR -- Couleur initiale (rouge)
-- Créer une animation (Tween) pour la partie
-- Cette animation change la transparence, la couleur et désactive les collisions
local powerTween = TweenService:Create(
powerPart, -- Objet à animer
TweenInfo.new(
POWER_DURATION, -- Durée de l'animation
Enum.EasingStyle.Linear, -- Style d'animation (linéaire)
Enum.EasingDirection.InOut, -- Direction de l'animation (aller-retour)
0, -- Nombre de répétitions (0 = une seule fois)
true -- Joue l'animation en boucle (inversée)
),
{
Transparency = 0.8, -- La partie devient semi-transparente
CanCollide = false, -- Désactive les collisions
Color = POWER_COLOR -- Change la couleur en vert
}
)
-- Boucle infinie pour activer l'animation aléatoirement
task.spawn(function()
while isPowerActive do
-- Attendre un temps aléatoire entre MIN_WITHOUT_POWER_DURATION et MAX_WITHOUT_POWER_DURATION
task.wait(math.random(MIN_WITHOUT_POWER_DURATION, MAX_WITHOUT_POWER_DURATION))
-- Jouer l'animation
powerTween:Play()
-- Inverser les propriétés CanCollide et CanTouch
powerPart.CanCollide = not powerPart.CanCollide
powerPart.CanTouch = not powerPart.CanCollide
-- Attendre que l'animation soit terminée
powerTween.Completed:Wait()
-- Réactiver les collisions et le toucher
powerPart.CanCollide = not powerPart.CanCollide
powerPart.CanTouch = not powerPart.CanCollide
end
end)
-- Détecter quand un joueur touche la partie
powerPart.Touched:Connect(function(hit)
print("La partie PowerPart a été touchée !")
end)
Configuration de la PowerPart
La PowerPart est configurée avec les propriétés suivantes :
Anchored = true: Empêche la partie de bouger (elle reste fixe dans le monde).Transparency = 0: La partie est complètement opaque (visible à 100%).CanCollide = true: Les joueurs et objets peuvent entrer en collision avec la partie.CanTouch = true: La partie peut détecter les touches (pour l’événementTouched).Color = NO_POWER_COLOR: La couleur initiale est rouge (état « sans power »).
Création de l’animation avec TweenService
TweenService permet de créer des animations fluides pour modifier les propriétés d’un objet sur une durée donnée.
Paramètres de TweenService:Create :
- Objet à animer :
powerPart(la partie à animer). TweenInfo.new: Définit les propriétés de l’animation :- Durée :
POWER_DURATION(5 secondes). - Style :
Enum.EasingStyle.Linear(animation linéaire, vitesse constante). - Direction :
Enum.EasingDirection.InOut(l’animation va et vient). - Répétitions :
0(une seule fois, maistruepour l’inverser à la fin). - Boucle inversée :
true(l’animation se joue en boucle aller-retour).
- Durée :
- Propriétés à animer :
Transparency = 0.8: La partie devient semi-transparente.CanCollide = false: Désactive les collisions pendant l’animation.Color = POWER_COLOR: Change la couleur en vert.
QCM : Teste ta compréhension !
Sur les variables et la configuration :
- À quoi sert
powerPart.Anchored = true?- a) À empêcher la partie de bouger.
- b) À rendre la partie invisible.
- c) À changer la couleur de la partie.
- Que fait
powerPart.Transparency = 0?- a) Rend la partie complètement opaque.
- b) Rend la partie complètement transparente.
- c) Rend la partie rouge.
Sur TweenService :
- À quoi sert
TweenService?- a) À créer des animations fluides pour les objets.
- b) À jouer des sons.
- c) À détecter les collisions.
- Que fait
TweenInfo.new(5, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, 0, true)?- a) Crée une animation de 5 secondes, linéaire, aller-retour, qui se joue une fois en boucle inversée.
- b) Crée une animation instantanée.
- c) Supprime l’objet après 5 secondes.
- Quelles propriétés sont animées dans ce script ?
- a)
Transparency,CanCollide, etColor. - b)
SizeetPosition. - c)
NameetMaterial.
- a)
Sur la boucle et les événements :
- Pourquoi utilise-t-on
task.spawn(function() ... end)?- a) Pour exécuter la boucle sans bloquer le reste du script.
- b) Pour arrêter le script.
- c) Pour créer un nouveau joueur.
- Que fait
math.random(MIN_WITHOUT_POWER_DURATION, MAX_WITHOUT_POWER_DURATION)?- a) Génère un nombre aléatoire entre
MIN_WITHOUT_POWER_DURATIONetMAX_WITHOUT_POWER_DURATION. - b) Attend exactement 5 secondes.
- c) Désactive la partie.
Réponse : a)
- a) Génère un nombre aléatoire entre
- Que fait
powerPart.Touched:Connect(function(hit) ... end)?- a) Exécute une fonction quand un objet touche la
PowerPart. - b) Change la taille de la
PowerPart. - c) Supprime la
PowerPart.
- a) Exécute une fonction quand un objet touche la
- Pourquoi inverse-t-on
CanCollideetCanTouchdans la boucle ?- a) Pour alterner entre un état où la partie est solide/touchable et un état où elle ne l’est pas.
- b) Pour changer la couleur de la partie.
- c) Pour supprimer la partie.
Changer la taille de la partie pendant l’animation
- Objectif : Faire grandir ou rétrécir la
PowerPartpendant l’animation. - Comment faire ?
- Ajoute
Size = Vector3.new(10, 10, 10)dans les propriétés duTween:luaCopier
- Ajoute
-- Récupérer le dossier et la partie "PowerPart" dans le Workspace
local powersFolder = workspace:WaitForChild("PowersFolder")
local powerPart = powersFolder:WaitForChild("PowerPart")
-- Variable pour contrôler l'exécution de la boucle (non utilisée ici, mais utile pour arrêter le script si besoin)
local isPowerActive = true
-- Service pour créer des animations fluides
local TweenService = game:GetService("TweenService")
-- Durées et couleurs pour les animations
local POWER_DURATION = 5 -- Durée de l'animation "power" (en secondes)
local MAX_WITHOUT_POWER_DURATION = 10 -- Durée maximale entre deux activations (en secondes)
local MIN_WITHOUT_POWER_DURATION = 3 -- Durée minimale entre deux activations (en secondes)
local POWER_COLOR = Color3.fromRGB(0, 255, 0) -- Couleur verte pour l'état "power"
local NO_POWER_COLOR = Color3.fromRGB(255, 0, 0) -- Couleur rouge pour l'état "sans power"
-- Configurer la partie "PowerPart"
powerPart.Anchored = true -- Empêcher la partie de bouger
powerPart.Transparency = 0 -- Rendre la partie complètement opaque
powerPart.CanCollide = true -- Permettre les collisions avec la partie
powerPart.CanTouch = true -- Permettre de détecter les touches sur la partie
powerPart.Color = NO_POWER_COLOR -- Couleur initiale (rouge)
-- Créer une animation (Tween) pour la partie
-- Cette animation change la transparence, la couleur et désactive les collisions
local powerTween = TweenService:Create(
powerPart, -- Objet à animer
TweenInfo.new(
POWER_DURATION, -- Durée de l'animation
Enum.EasingStyle.Linear, -- Style d'animation (linéaire)
Enum.EasingDirection.InOut, -- Direction de l'animation (aller-retour)
0, -- Nombre de répétitions (0 = une seule fois)
true -- Joue l'animation en boucle (inversée)
),
{
Transparency = 0.8, -- La partie devient semi-transparente
CanCollide = false, -- Désactive les collisions
Color = POWER_COLOR,
Size = Vector3.new(powerPart.Size.X + 10, powerPart.Size.Y + 10, powerPart.Size.Z)
}
)
-- Boucle infinie pour activer l'animation aléatoirement
task.spawn(function()
while isPowerActive do
-- Attendre un temps aléatoire entre MIN_WITHOUT_POWER_DURATION et MAX_WITHOUT_POWER_DURATION
task.wait(math.random(MIN_WITHOUT_POWER_DURATION, MAX_WITHOUT_POWER_DURATION))
-- Jouer l'animation
powerTween:Play()
-- Inverser les propriétés CanCollide et CanTouch
powerPart.CanCollide = not powerPart.CanCollide
powerPart.CanTouch = not powerPart.CanCollide
-- Attendre que l'animation soit terminée
powerTween.Completed:Wait()
-- Réactiver les collisions et le toucher
powerPart.CanCollide = not powerPart.CanCollide
powerPart.CanTouch = not powerPart.CanCollide
end
end)
-- Détecter quand un joueur touche la partie
powerPart.Touched:Connect(function(hit)
print("La partie PowerPart a été touchée !")
end)










































