Roblox Animations

sentinelcore/roblox-skills/roblox-animations

作者 sentinelcoref2b1910a7fb898ed35cf2f856e2a2e48e38276bf无许可证收录于 2026年10月9日更新于 2026年10月9日

Use when working with Roblox animation systems including playing, stopping, or blending animations on Humanoid characters or non-Humanoid models, handling AnimationTrack events, replacing default character animations, or debugging animation priority and blending issues.

AI 生成的概览

Roblox 动画系统参考指南:在 Humanoid 与非 Humanoid 模型上加载、播放、混合和替换动画。

功能
该技能是一份 Roblox 动画 API 参考文档。它介绍 Animation、Animator、AnimationController 和 AnimationTrack 等核心对象,并说明如何加载、播放、停止、循环和混合动画轨道。内容还涵盖动画优先级、标记事件、替换角色默认动画,以及常见错误及其修复方法。
适用场景
适用于编写或调试 Roblox 动画代码的场景,例如在角色或道具上播放、停止动画,处理 AnimationTrack 事件,替换角色默认动画,或排查动画优先级与混合问题。
运行要求
无需任何工具、软件包或凭据;仅为说明文档,不附带脚本。使用前提是熟悉 Roblox Studio 与 Luau 脚本。

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

lua
-- LocalScript in StarterCharacterScriptslocal character = script.Parentlocal 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 1track:Play(0.1, 1, 0.5)          -- fadeTime, weight, speed
track:AdjustSpeed(1.5)           -- change speed while playingtrack: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

lua
-- Fires after fade-out completestrack.Stopped:Connect(function()    print("Animation finished")end)
-- Use :Once for one-shot cleanuptrack.Stopped:Once(function()    cleanup()end)
-- Fires when a named keyframe marker is reached-- Marker names are set in the Roblox Animation Editortrack: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
lua
-- Force a looped animation to play oncetrack.Looped = falsetrack: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
lua
idleTrack.Priority   = Enum.AnimationPriority.IdlerunTrack.Priority    = Enum.AnimationPriority.MovementattackTrack.Priority = Enum.AnimationPriority.Action
idleTrack:Play()runTrack:Play()     -- overrides idle on shared jointsattackTrack:Play()  -- blends on top for joints it owns

Weight adjusts influence when two tracks share the same priority:

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

Humanoid vs AnimationController

Humanoid (characters and humanoid NPCs)

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

AnimationController (props, vehicles, creatures)

lua
local controller = model:FindFirstChildOfClass("AnimationController")local animator = controller:FindFirstChildOfClass("Animator")if not animator then    animator = Instance.new("Animator")    animator.Parent = controllerendlocal 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.

lua
-- LocalScript in StarterCharacterScriptslocal 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    endend
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

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

Quick Playback Reference

lua
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 secondstrack.IsPlaying      -- booltrack.Looped         -- bool (override allowed at runtime)track.Priority       -- Enum.AnimationPrioritytrack.WeightCurrent  -- actual blended weight right nowtrack.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

来源与署名

来源:sentinelcore/roblox-skills位于roblox-animations提交f2b1910

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架