godot-animation-player
Installation
SKILL.md
AnimationPlayer
Expert guidance for Godot's timeline-based keyframe animation system.
NEVER Do
- NEVER forget RESET tracks — Without a RESET track, animated properties don't restore to initial values when changing scenes. Create RESET animation with all default states [12].
- NEVER use
Animation.CALL_MODE_CONTINUOUSfor function calls — This calls the method EVERY frame during the keyframe. UseCALL_MODE_DISCRETE(calls once) to avoid logic spam [13, 77]. - NEVER animate resource properties directly — Animating
material.albedo_colorcreates embedded resources that bloat file size. Store the material in a variable or useinstance uniforminstead [14]. - NEVER use
animation_finishedfor looping animations — This signal doesn't fire for looped animations. Useanimation_loopedor checkcurrent_animationin_process(). - NEVER hardcode animation names as strings across large codebases — Use constants or enums. Typos cause silent failures.
- NEVER use
seek()withoutupdate=truefor same-frame logic — If you need properties to update immediately (e.g., for physics checks), you MUST set theupdateparameter totrue. - NEVER leave unnecessary AnimationPlayers
active— If an entity is off-screen and its animation is purely visual (no logic tracks), setactive = falseto save significant CPU/GPU processing [317]. - NEVER change
AnimationLibrarycontent while it is playing — This causes immediate crashes or undefined transform states. Stop the player or wait for thefinishedsignal before swapping libraries. - NEVER rely on
speed_scalefor long-term synchronization — For multiplayer or rhythm games, useseek()with a global time reference to prevent frame-drift.