Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
sentinelcore avatar

Roblox Animations

  • 501 installs
  • 11 repo stars
  • Updated February 23, 2026
  • sentinelcore/roblox-skills

roblox-animations is a Claude Code skill that references Roblox animation APIs—including Animation, Animator, AnimationController, and AnimationTrack—for developers who need to play, stop, blend, or debug character and r

About

roblox-animations is an agent skill from sentinelcore/roblox-skills that documents Roblox's animation object model and playback patterns for Luau developers. The skill covers core objects—Animation assets with AnimationId, Animator inside Humanoid or AnimationController for non-character rigs, and AnimationTrack instances returned by LoadAnimation for play, stop, and blend control. Developers reach for roblox-animations whenloader when replacing default character animations, handling AnimationTrack events, resolving priority and blending conflicts, or debugging Humanoid versus AnimationController setups. The reference maps where scripts should run, how tracks layer by priority, and common pitfalls when mixing locomotion, emotes, and custom rig animations in Roblox experiences.

  • roblox-animations
  • AI & Agent Building
  • AI-coding skill

Roblox Animations by the numbers

  • 501 all-time installs (skills.sh)
  • +39 installs in the week ending Jul 27, 2026 (Skillselion tracking)
  • Ranked #1,765 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/sentinelcore/roblox-skills --skill roblox-animations

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs501
repo stars11
Last updatedFebruary 23, 2026
Repositorysentinelcore/roblox-skills

How do you blend Roblox character animations in Luau?

Helps with ai & agent building tasks.

Who is it for?

Roblox Luau developers implementing custom character locomotion, emotes, or non-Humanoid rig animations with correct track priority.

Skip if: Unity, Unreal, or Godot animation systems outside the Roblox engine and its Humanoid API.

When should I use this skill?

The user works with Roblox animations, AnimationTrack events, Humanoid or AnimationController rigs, or animation priority and blending bugs.

What you get

Luau animation scripts, AnimationTrack playback logic, priority and blending configurations, and debugging notes for Humanoid rigs.

  • Luau animation playback scripts
  • Animation blending configuration
  • AnimationTrack debugging guidance

Files

SKILL.mdMarkdownGitHub ↗

Roblox Animations Reference

Core Objects

ObjectPurpose
AnimationAsset reference — holds AnimationId
AnimatorLives inside Humanoid or AnimationController; loads and drives tracks
AnimationControllerReplaces Humanoid for non-character rigs
AnimationTrackReturned by LoadAnimation; controls playback

---

Where to Run Animation Code

ScenarioScript TypeLocation
Local player characterLocalScriptStarterCharacterScripts
NPC / server-owned modelScriptInside model or ServerScriptService
Never play player character animations from a Script — they will not replicate correctly to the local client.

---

Loading and Playing Animations

-- LocalScript in StarterCharacterScripts
local character = script.Parent
local animator = character:WaitForChild("Humanoid"):WaitForChild("Animator")

local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://1234567890"

local track = animator:LoadAnimation(animation)

track:Play()                      -- default fade-in (0.1s), weight 1, speed 1
track:Play(0.1, 1, 0.5)          -- fadeTime, weight, speed

track:AdjustSpeed(1.5)           -- change speed while playing
track:AdjustWeight(0.5, 0.2)     -- weight 0.5, fade over 0.2s

track:Stop()                      -- default fade-out (0.1s)
track:Stop(0.5)                   -- fade out over 0.5s

---

AnimationTrack Events

-- Fires after fade-out completes
track.Stopped:Connect(function()
    print("Animation finished")
end)

-- Use :Once for one-shot cleanup
track.Stopped:Once(function()
    cleanup()
end)

-- Fires when a named keyframe marker is reached
-- Marker names are set in the Roblox Animation Editor
track:GetMarkerReachedSignal("FootStep"):Connect(function(paramString)
    playFootstepSound()
end)

---

Looped vs One-Shot

PropertyLoopedOne-Shot
track.Loopedtruefalse
Set inAnimation Editor (loop toggle)Animation Editor
Override at runtimetrack.Looped = falsetrack.Looped = true
Stops automaticallyNo — must call track:Stop()Yes — after one cycle
-- Force a looped animation to play once
track.Looped = false
track:Play()
track.Stopped:Once(function() print("Done") end)

---

Animation Priority and Blending

Priority controls which tracks win on contested joints. Higher priority overrides lower.

Idle < Movement < Action < Action2 < Action3 < Action4 < Core
idleTrack.Priority   = Enum.AnimationPriority.Idle
runTrack.Priority    = Enum.AnimationPriority.Movement
attackTrack.Priority = Enum.AnimationPriority.Action

idleTrack:Play()
runTrack:Play()     -- overrides idle on shared joints
attackTrack:Play()  -- blends on top for joints it owns

Weight adjusts influence when two tracks share the same priority:

trackA:Play(0, 0.6)  -- weight 0.6
trackB:Play(0, 0.4)  -- weight 0.4 — blended on shared joints

---

Humanoid vs AnimationController

Humanoid (characters and humanoid NPCs)

local animator = character:FindFirstChildOfClass("Humanoid"):FindFirstChildOfClass("Animator")
local track = animator:LoadAnimation(animation)
track:Play()

AnimationController (props, vehicles, creatures)

local controller = model:FindFirstChildOfClass("AnimationController")
local animator = controller:FindFirstChildOfClass("Animator")
if not animator then
    animator = Instance.new("Animator")
    animator.Parent = controller
end
local track = animator:LoadAnimation(animation)
track:Play()

---

Replacing Default Character Animations

The Animate LocalScript in the character holds animation references. Modify its AnimationId values on CharacterAdded.

-- LocalScript in StarterCharacterScripts
local animate = script.Parent:WaitForChild("Animate")

local function replaceAnim(slotName, newId)
    local slot = animate:FindFirstChild(slotName)
    if slot then
        local animObj = slot:FindFirstChildOfClass("Animation")
        if animObj then animObj.AnimationId = newId end
    end
end

replaceAnim("idle",  "rbxassetid://111111111")
replaceAnim("run",   "rbxassetid://222222222")
replaceAnim("jump",  "rbxassetid://333333333")
replaceAnim("fall",  "rbxassetid://444444444")
replaceAnim("climb", "rbxassetid://555555555")

Available slots: idle, walk, run, jump, fall, climb, swim, swimidle, toolnone, toolslash, toollunge.

---

Stop All Playing Animations

local function stopAll(animator, fadeTime)
    for _, track in animator:GetPlayingAnimationTracks() do
        track:Stop(fadeTime or 0.1)
    end
end

---

Quick Playback Reference

track:Play(fadeTime, weight, speed)
-- fadeTime  default 0.1   — blend-in seconds
-- weight    default 1.0   — joint influence (0–1)
-- speed     default 1.0   — playback rate

track.TimePosition   -- current position in seconds (read/write)
track.Length         -- total duration in seconds
track.IsPlaying      -- bool
track.Looped         -- bool (override allowed at runtime)
track.Priority       -- Enum.AnimationPriority
track.WeightCurrent  -- actual blended weight right now
track.WeightTarget   -- target weight after fade

---

Upper-Body Only Animations

Priority blending affects all joints an animation touches. To play a wave only on the arms while legs animate from run/idle, the animation itself must be authored to only key upper-body bones (leave lower-body joints unkeyed in the Animation Editor). There is no runtime API to mask joints — the solution is in the animation asset, not the script.

---

Common Mistakes

MistakeFix
Playing character animations in a ScriptUse LocalScript in StarterCharacterScripts
LoadAnimation called on Humanoid (deprecated)Call on Animator instead
Two animations fighting on same jointsAssign different Priority values
Stopped fires immediatelyAnimation has zero length or wrong Looped setting
GetMarkerReachedSignal never firesMarker name misspelled, or animation not re-uploaded after adding markers
NPC animation not visible to other clientsPlay from a Script (server), not LocalScript
AnimationController track won't playMissing Animator child inside AnimationController

Related skills

FAQ

Which Roblox objects does roblox-animations document?

roblox-animations documents Animation assets holding AnimationId, Animator components inside Humanoid or AnimationController rigs, and AnimationTrack instances from LoadAnimation that control play, stop, blend, and event callbacks in Luau scripts.

When should a Roblox developer invoke roblox-animations?

Roblox developers should invoke roblox-animations when playing or stopping character animations, blending tracks, replacing default Humanoid animations, or debugging priority conflicts on Humanoid and non-Humanoid rigs built with AnimationController.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.