Module 05 · Leçon 5 sur 6
Animer les personnages (R6 et R15)
Comprends la différence entre R6 et R15, crée une animation de victoire avec l’Animation Editor, publie-la avec les bonnes permissions et joue-la depuis un script avec l’Animator.
- ⏱️ 40 min
- 📝 Quiz de 7 questions
- 🔄 Vérifié le 24 octobre 2026
Sur cette page
- R6 et R15 : deux types de personnages
- Choisir le type d’avatar de ton jeu
- Créer une animation avec l’Animation Editor
- 1. Insérer un rig de travail
- 2. Ouvrir l’éditeur
- 3. Poser des images clés
- 4. Sauvegarder ou publier ?
- Qui a le droit de jouer quelle animation ?
- Jouer une animation depuis un script
- Le trio Animation, Animator, AnimationTrack
- Les priorités d’animation
- Client ou serveur ?
- L’animation de victoire de l’Obby des Nuages
- Côté serveur : détecter la victoire
- Côté client : jouer l’animation
- Quiz de fin de leçon
🎯 Dans cette leçon, tu vas apprendre à…
- Distinguer les rigs R6 et R15 et choisir le type d’avatar de ton jeu
- Créer et publier une animation avec l’Animation Editor
- Comprendre qui a le droit de charger une animation dans quel jeu
- Jouer une animation avec Animator:LoadAnimation et contrôler l’AnimationTrack
Le joueur a enfin atteint le dernier checkpoint de l’Obby des Nuages. Bravo… et ensuite ? Une petite danse de victoire rend ce moment beaucoup plus satisfaisant ! Dans cette leçon, tu découvres les deux types de personnages de Roblox, tu crées ta propre animation, tu comprends les règles de permissions (qui ont changé récemment) et tu la joues depuis un script.
R6 et R15 : deux types de personnages
Un personnage Roblox est un rig : un modèle fait de parties reliées par des articulations. Il en existe deux familles :
- R6 : 6 parties (tête, torse, deux bras, deux jambes). Mouvements plus rigides, style « classique ». L’outil Rig Builder le présente comme un rig legacy (ancien).
- R15 : 15 parties, avec coudes, genoux, poignets… Les mouvements sont bien plus naturels, et seul le R15 accepte les vêtements et accessoires superposables (layered clothing).
Choisir le type d’avatar de ton jeu
Le réglage se trouve dans la fenêtre Avatar Settings, accessible depuis le menu File ou l’onglet Avatar de Studio. Le bouton ⋯ en haut de la fenêtre permet de choisir le type d’avatar par défaut : R6, R15 ou R15 & R6.
Une animation est créée sur un rig d’un type donné : une animation faite pour un R15 est prévue pour des personnages R15. Le plus simple est donc de choisir un seul type pour ton jeu et de créer tes animations sur ce type. Pour l’Obby des Nuages, on choisit R15.
Créer une animation avec l’Animation Editor
1. Insérer un rig de travail
Dans l’onglet Avatar, ouvre le Rig Builder et insère un rig R15 (le type de ton jeu). C’est une « marionnette » sur laquelle tu vas poser les mouvements.
2. Ouvrir l’éditeur
Toujours dans l’onglet Avatar, ouvre l’Animation Editor, sélectionne ton rig et donne un nom à l’animation, par exemple Victoire.
3. Poser des images clés
Une animation est une suite de poses placées dans le temps, les images clés (keyframes). L’éditeur calcule automatiquement le mouvement entre deux poses. Pour une victoire simple :
- à 0 s, la pose de départ (bras le long du corps) ;
- à 0,3 s, les deux bras levés au-dessus de la tête ;
- à 0,6 s, un petit saut (le torse monte légèrement) ;
- à 1 s, retour à la pose de départ.
Fais pivoter les articulations avec l’outil de rotation, puis lis le résultat avec le bouton Play de l’éditeur. Tu peux aussi activer ou non la boucle (Looped) et choisir la priorité de l’animation (voir plus bas).
4. Sauvegarder ou publier ?
Attention à ne pas confondre :
- Save enregistre ton travail dans le projet (un objet
KeyframeSequencerangé dans ServerStorage). C’est un brouillon : ton jeu ne doit pas l’utiliser directement. - Publish to Roblox (bouton ⋯ de l’éditeur) publie l’animation comme un asset (une ressource) sur Roblox. Elle reçoit alors un identifiant d’asset (asset ID), que tes scripts utiliseront.
Lors de la publication, si ton jeu appartient à un groupe (une communauté), la documentation demande de choisir ce groupe dans le champ Creator. Récupère ensuite l’identifiant de l’animation (par exemple depuis la Toolbox, dans tes créations).
Qui a le droit de jouer quelle animation ?
C’est un point qui a changé récemment. Le 31 juillet 2025, Roblox a annoncé sur le DevForum que les animations deviennent des assets « Restricted » (à usage restreint), comme l’audio et la vidéo. Au moment de la rédaction (octobre 2026), voici ce que ça implique :
- un jeu ne peut charger une animation que s’il a la permission de l’utiliser. Une fois cette permission obtenue, l’animation se charge pour tous les joueurs du jeu ;
- la permission est donnée automatiquement quand une personne qui a le droit de partager l’animation l’utilise dans Studio pour ce jeu : insertion depuis la Toolbox, chargement pendant un test, collage de l’animation ou de son ID dans une autre place ;
- on peut aussi la donner à la main depuis le Creator Hub, dans les permissions de l’asset ;
- une animation ne peut pas être passée en Open Use (utilisable par tous) ;
- la permission accordée à un jeu ne peut pas être retirée, pour éviter de casser des jeux ;
- depuis le 21 août 2025, on peut partager une animation avec ses amis (connexions) et des groupes depuis la page de configuration de l’asset (onglet Permissions).
Concrètement, pour l’Obby des Nuages : publie l’animation avec le même propriétaire que le jeu (ton compte, ou le groupe si le jeu appartient à un groupe), puis teste-la dans Studio. Les animations publiées par d’autres créateurs ne fonctionneront pas dans ton jeu, sauf s’ils te les partagent.
Jouer une animation depuis un script
Le trio Animation, Animator, AnimationTrack
Trois objets entrent en jeu :
- un objet
Animation, qui contient l’identifiant (AnimationId = "rbxassetid://…") ; - l’
Animator, rangé dans leHumanoiddu personnage, qui s’occupe de jouer et de répliquer les animations ; - une
AnimationTrack(piste d’animation), obtenue avecanimator:LoadAnimation(animation), que tu contrôles.
Les méthodes et propriétés utiles d’une AnimationTrack :
| Élément | Rôle |
|---|---|
Play(fadeTime, weight, speed) |
lance l’animation ; les trois paramètres sont facultatifs (par défaut : fondu de 0,1 s, poids 1, vitesse 1) |
Stop(fadeTime) |
arrête l’animation |
Looped |
true = l’animation recommence en boucle |
Priority |
la priorité (voir ci-dessous) |
IsPlaying |
true si elle est en cours |
Ended |
événement déclenché quand l’animation est complètement terminée |
Les priorités d’animation
Quand plusieurs animations bougent les mêmes articulations, la priorité décide laquelle s’affiche. De la plus forte à la plus faible : Action4, Action3, Action2, Action, Movement, Idle, Core.
Les animations par défaut des personnages Roblox (marche, saut, attente) jouent en priorité Core, la plus basse. Pour une animation de victoire qui doit passer devant tout le reste, choisis Action. À priorité égale, les animations se mélangent selon leur poids.
Client ou serveur ?
La référence de Animator:LoadAnimation est claire :
- pour le personnage d’un joueur, une animation lancée par ce joueur (dans un LocalScript) est répliquée au serveur et aux autres joueurs : tout le monde la voit ;
- pour un modèle qui n’est pas un personnage de joueur (un PNJ, par exemple), il faut charger et jouer l’animation depuis le serveur.
Notre animation de victoire se joue donc côté client. Mais c’est le serveur qui sait quand le joueur a gagné : il préviendra le client avec un RemoteEvent.
L’animation de victoire de l’Obby des Nuages
Crée un RemoteEvent Victoire dans ReplicatedStorage › Remotes (bouton ⊕ sur Remotes, comme pour EquiperObjet à la leçon 3).
Côté serveur : détecter la victoire
Si tu as fait le défi de la leçon 5 du module 4 (annonce de victoire avec AnnonceVictoire et une LigneArrivee), supprime ce script de démonstration et le RemoteEvent AnnonceVictoire : le Script Victoire ci-dessous le remplace, sinon ton jeu aurait deux systèmes de victoire.
Rappel de la convention : Etape contient le numéro du dernier checkpoint validé. Le joueur a gagné quand Etape atteint le numéro du dernier checkpoint. Crée un Script Victoire dans ServerScriptService avec ce code :
-- Script « Victoire » dans ServerScriptService (côté serveur)
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Workspace = game:GetService("Workspace")
local victoire = ReplicatedStorage:WaitForChild("Remotes"):WaitForChild("Victoire") :: RemoteEvent
local dossierCheckpoints = Workspace:WaitForChild("Checkpoints")
-- Le dernier checkpoint porte le plus grand numéro (le dossier ne contient que les Parts "1", "2"…)
local derniereEtape = #dossierCheckpoints:GetChildren()
local function surArrivee(player: Player)
-- Les leaderstats apparaissent une fois les données chargées (leçon 2)
local leaderstats = player:WaitForChild("leaderstats", 60)
if leaderstats == nil then
return
end
local etape = leaderstats:WaitForChild("Etape")
if not etape:IsA("IntValue") then
return
end
-- Changed donne la nouvelle valeur à chaque changement d'étape
etape.Changed:Connect(function(nouvelleEtape: number)
if nouvelleEtape == derniereEtape then
victoire:FireClient(player) -- « tu as gagné, joue l'animation ! »
end
end)
end
Players.PlayerAdded:Connect(surArrivee)
for _, player in Players:GetPlayers() do
task.spawn(surArrivee, player)
end
Côté client : jouer l’animation
Crée un LocalScript AnimationVictoire dans StarterPlayer › StarterCharacterScripts. Les scripts de ce dossier sont copiés dans le personnage à chaque apparition : script.Parent est donc toujours le personnage actuel.
-- LocalScript « AnimationVictoire » dans StarterPlayer > StarterCharacterScripts
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local personnage = script.Parent
local humanoid = personnage:WaitForChild("Humanoid") :: Humanoid
local animator = humanoid:WaitForChild("Animator") :: Animator
local victoire = ReplicatedStorage:WaitForChild("Remotes"):WaitForChild("Victoire") :: RemoteEvent
-- 1. L'objet Animation : remplace l'ID par celui de TON animation publiée
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://0000000000"
-- 2. On charge l'animation UNE fois et on garde la piste
local piste = animator:LoadAnimation(animation)
piste.Priority = Enum.AnimationPriority.Action -- passe devant marche et attente
piste.Looped = false -- une seule fois
-- 3. Le serveur annonce la victoire : on joue l'animation
victoire.OnClientEvent:Connect(function()
if not piste.IsPlaying then
piste:Play()
end
end)
-- 4. Facultatif : réagir à la fin de l'animation
piste.Ended:Connect(function()
print("Animation de victoire terminée !")
end)
Quand le personnage réapparaît, une nouvelle copie du script démarre sur le nouveau personnage, avec son propre Animator et sa propre piste : l’animation se joue toujours sur le personnage actuel.
Ce qu’il faut retenir
- R6 (6 parties, legacy) et R15 (15 parties, plus expressif) : choisis un type dans Avatar Settings et anime sur ce même type.
- L’Animation Editor crée des poses dans le temps ; Publish to Roblox donne un identifiant d’asset utilisable par les scripts.
- Depuis 2025, les animations sont des assets « Restricted » : seul un jeu qui a la permission peut les charger ; publie-les avec le même propriétaire que le jeu.
- On joue une animation avec
Animator:LoadAnimation(animation)puispiste:Play(); on charge une fois, on réutilise la piste. - La priorité (
Actionpour une victoire) décide quelle animation l’emporte ; sur le personnage du joueur, une animation lancée côté client est vue par tous.
Sources et pour aller plus loin
- Use animations — documentation Roblox
- Animation Editor — documentation Roblox
- Animator:LoadAnimation — référence API
- AnimationTrack — référence API
- Enum AnimationPriority — référence API
- Avatar Settings — documentation Roblox
- Rig Builder — documentation Roblox
- Improving Animation Asset Permissions — annonce officielle (DevForum, 31 juillet 2025)
- Sharing Animation Assets with Connections and Groups — annonce officielle (DevForum, 21 août 2025)