Roblox Animation Guide (2026): Animate in Studio, Add Keyframes and Play It
To make a Roblox animation, open Roblox Studio, add or select a rig, launch the Animation Editor, create poses at different keyframes, preview the movement, and choose Publish to Roblox. Publishing gives you an animation asset ID. You can then load the asset through an Animator and play it with an AnimationTrack inside an experience. The steps below cover a simple wave, the timeline, scripting, and the issues that commonly stop custom animations from working.

Roblox animation: the quick workflow
- Open Studio and create or open an experience you can edit.
- Insert a character rig using Studio’s Rig Generator, or select a compatible rig already in your workspace.
- From the Avatar tab, open the Animation Editor (called Clip Editor in some official tutorials and Studio interfaces).
- Move the timeline scrubber and rotate or move joints to create distinct poses.
- Press Play in the editor to preview timing, adjust easing, and decide whether the motion should loop.
- Save your working animation, then use the editor’s Publish to Roblox command to create an asset ID.
- Add the published animation to your experience and play it through an
Animator.
You do not need a separate paid animation maker to follow this workflow: the tools described here are part of Roblox Studio. That does not mean every third-party animation service or marketplace item is free.
Before you animate: choose the right rig
A rig is a model whose parts are connected by joints that can be posed. Select it before opening the editor. The common avatar rigs are R6, with a simpler six-part structure, and R15, which supports more detailed character poses. A custom rig can also work if it is set up with the joints and animation components the editor needs.
| Situation | Recommended starting point | Why |
|---|---|---|
| A first wave or dance | R15 test rig | More articulated joints make it easier to shape a natural pose. |
| A classic blocky character | R6 rig | Keeps movements appropriate for the simpler character layout. |
| A non-player object or creature | Properly jointed custom rig | May use an AnimationController with an Animator instead of a Humanoid. |
Do not assume an animation authored for one rig will look identical on another. Joint names, proportions, and animation compatibility matter. For more context, see our R6 vs. R15 character guide.
How to make a one-second waving animation
This is an example project you can customize, not a preset animation or a measured animation imported from Roblox. The idea is to create a readable gesture with three poses.
1. Set a neutral starting pose
In the editor, select the rig and name your clip something recognizable, such as Simple Wave. Move the scrubber to the start (0:00). Select the shoulder or arm joint and place the hand down in a relaxed starting position. Set a keyframe for the joints you intend to animate.
2. Raise the hand halfway through
Move the scrubber to 0:15, then rotate the shoulder and elbow so the hand is raised. The default timeline is displayed in seconds:frames; at the editor’s usual 30 frames per second, 0:15 is half a second, not 15 seconds. This distinction prevents many timing mistakes.
3. Return to neutral and preview
Move to 1:00 and return the arm toward the starting position. Hit the editor’s Play control or Spacebar to preview. If the character snaps between poses, inspect the keyframe times and ease settings. Move a pose slightly earlier or later to change the gesture’s energy.

4. Improve easing and decide whether to loop
Easing changes how movement accelerates and slows between keyframes. Smooth easing usually looks better for a friendly wave; sharper timing can suit a punch or impact. Use looping when you genuinely want repeated movement, such as an idle or walk cycle. Do not loop a one-time emote or reaction unless repetition is the intended behavior.
Save, publish, and find your Roblox animation ID
Saving in Studio preserves your working keyframe sequence; it is not the same as publishing a reusable animation asset. When the clip is ready, open the Animation Editor’s menu (often shown as three dots) and choose Publish to Roblox. Enter a clear asset name, select the correct creator if prompted, and complete the publishing flow. Then copy the resulting animation ID from the relevant asset or Creator Dashboard.
Group-owned experiences: Roblox’s editor documentation specifically instructs creators to select the group in the Creator field if the animation is intended for a group-owned game. A mismatched creator or insufficient permissions can stop an apparently valid animation from loading in the intended experience. Do not copy an unrelated public animation ID and assume the asset has been authorized for your project.
For the precise controls as Roblox changes Studio, consult the official Animation Editor documentation.
How to play your animation in a Roblox game (Lua example)
Once an animation is published, its ID can be used with an Animation instance. The usual character workflow loads that instance through the character’s Animator, creating an AnimationTrack that can be played, stopped, looped, or assigned a priority.
This demonstration plays the animation once whenever the local player’s character appears. Place it in a LocalScript inside StarterPlayer > StarterPlayerScripts. Replace the placeholder digits with the asset ID of your own published animation:
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local function playDemo(character)
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://YOUR_ANIMATION_ID"
local track = animator:LoadAnimation(animation)
track.Priority = Enum.AnimationPriority.Action
track.Looped = false
track:Play()
end
player.CharacterAdded:Connect(playDemo)
if player.Character then
playDemo(player.Character)
endThe placeholder makes the snippet intentionally non-runnable until you add an actual animation ID. This example is not a complete player-triggered emote system; it starts on character spawn. For a button, tool, or keyboard-triggered animation, load the track once and call track:Play() in that action’s handler. Avoid calling Animator:LoadAnimation() repeatedly each frame just to retrieve an already-loaded track.
When the rig is not a player character, playback and replication rules differ. Roblox documents the use of an AnimationController with an Animator for rigs that lack a Humanoid, and notes that animations for non-player models generally need to be started on the server to replicate. Use the official Use animations guide and Animator API reference when implementing those cases.
Animation priority: why one movement overrides another
Multiple tracks can affect the same joints. Roblox exposes priorities such as Core, Idle, Movement, Action, Action2, Action3, and Action4. Higher-priority actions can take precedence when tracks compete for the same body parts. If your custom wave seems invisible, the game may still be playing a conflicting movement or action track. Choose an appropriate priority for the animation’s purpose rather than assigning the highest level to everything.
| Animation type | Practical starting point | Common mistake |
|---|---|---|
| Idle breathing | Idle | Using Action when a subtle idle is intended |
| Walk/run cycle | Movement | Competing with the default Animate script unintentionally |
| Wave or attack | Action | A second action track affecting the same joints |
This table is a starting framework, not a guarantee of blending behavior. Roblox’s AnimationPriority reference lists the supported priority values.
Roblox animation not playing? A troubleshooting checklist
- Published versus saved: Did you actually publish an animation asset, or only save a local KeyframeSequence in Studio?
- Wrong asset ID: Check that your
AnimationIdrefers to the correct animation and uses therbxassetid://prefix. - Permissions: Does the animation’s creator/owner have the correct access for this individual- or group-owned experience?
- Missing Animator: Is an Animator present under the character’s Humanoid, or under the AnimationController of your custom rig?
- Rig mismatch: Was the clip authored with joints compatible with the character that is trying to play it?
- Conflicting tracks: Is a default walk, idle, or other action animation taking precedence over your custom clip?
- Replicated playback: Is the Animator created in the appropriate context, and are you following the player-character versus non-player rig rules?
- Timing: Does the timeline have usable poses and keyframes, rather than one static position?
Use Studio’s Output panel to investigate actual load errors instead of guessing that an animation is broken. When the problem may involve general experience testing rather than the asset itself, see our Roblox Studio solo and multiplayer testing guide.
Make the animation feel more natural: four small improvements
- Use an anticipation pose. Even a brief motion in the opposite direction can make a wave or jump feel less robotic.
- Offset joints slightly. In a gesture, the shoulder can lead and the wrist can follow instead of moving every joint simultaneously.
- Compare silhouettes. Preview from the front and side so the motion reads even when the character is small on screen.
- Limit unnecessary keyframes. Keep intentional poses; Roblox’s Animation Editor includes keyframe optimization tools if a track becomes overly complicated.
For a first playable project built around custom motion, our beginner Roblox game creation guide covers the surrounding Studio workflow.
FAQ: Roblox animations
Can you make a Roblox animation for free?
You can use the built-in Roblox Studio Animation Editor without purchasing a separate animation editor. Creating and distributing assets may still be subject to Roblox’s current platform rules and permissions.
What does 0:15 mean in Roblox Animation Editor?
The timeline shows seconds and frames. At 30 frames per second, 0:15 represents half a second. It is not a fifteen-second animation.
Why can I preview an animation in Studio but not play it in my game?
Previewing and publishing are different steps. Check the published asset ID, creator ownership and access permissions, compatible rig, and whether an Animator is loading the track correctly.
Should I use R6 or R15 for an animated character?
Both support animations, but the resulting movement depends on the rig’s joints. R15 generally provides more articulation for detailed gestures; R6 is appropriate for deliberately simple classic avatars. Author and test on the rig format your experience actually uses.
Do I need a script to play a custom animation?
For the demonstrated custom playback behavior, yes: load the published animation through an Animator and play the returned AnimationTrack. Roblox also supports replacing default character animations using its documented character animation workflow.
Bottom line
The most reliable way to learn Roblox animation is to animate one small action from start to finish: select a rig, pose it in the Animation Editor, set meaningful keyframes, publish the asset with the right creator, and test the resulting AnimationTrack in Studio. Once that works, you can add more poses, looping, character-specific variations, and input-driven controls without guessing which part of the process failed.
