Aller au contenu
Forma Roblox

Rechercher dans la formation

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

🎯 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 :

  1. à 0 s, la pose de départ (bras le long du corps) ;
  2. à 0,3 s, les deux bras levés au-dessus de la tête ;
  3. à 0,6 s, un petit saut (le torse monte légèrement) ;
  4. à 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 KeyframeSequence rangé 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 :

  1. un objet Animation, qui contient l’identifiant (AnimationId = "rbxassetid://…") ;
  2. l’Animator, rangé dans le Humanoid du personnage, qui s’occupe de jouer et de répliquer les animations ;
  3. une AnimationTrack (piste d’animation), obtenue avec animator: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) puis piste:Play() ; on charge une fois, on réutilise la piste.
  • La priorité (Action pour 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

Quiz : vérifie tes acquis

7 questions · réussite à partir de 70 % · valide chaque réponse pour voir l’explication

  1. Question 1QCMQuelle est la principale différence entre un rig R6 et un rig R15 ?
  2. Question 2Vrai ou fauxPour jouer une animation, la méthode recommandée aujourd’hui est Humanoid:LoadAnimation.
  3. Question 3Trouve le bugCe LocalScript (dans StarterCharacterScripts) doit jouer une animation de salut. Il provoque une erreur. Où est le bug ?
    local personnage = script.Parent
    local humanoid = personnage:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    
    local animation = Instance.new("Animation")
    animation.AnimationId = "rbxassetid://1234567890"
    
    local piste = animator:LoadAnimation("rbxassetid://1234567890")
    piste:Play()
  4. Question 4QCMTon animation de victoire ne s’affiche pas bien parce que l’animation de marche de Roblox « gagne » sur les jambes. Que faire ?
  5. Question 5Vrai ou fauxDepuis l’été 2025, une animation est un asset « Restricted » ; un jeu ne peut la charger que s’il a reçu la permission de l’utiliser.
  6. Question 6QCMOù placer le LocalScript qui joue une animation sur le personnage du joueur, pour qu’elle soit vue par tous ?
  7. Question 7Améliore ce promptTu as publié ton animation de victoire. Tu veux maintenant que Claude Code écrive les scripts qui la jouent. Quelle version du prompt donnera le meilleur résultat ?
    Le prompt de départ
    fais une animation de victoire

    Choisis la meilleure version de ce prompt.