Animation Tree Plugin
Animation Tree is a node-based animation system for Roblox created by Crypto (ZDevZ12). I built it because Roblox’s default animator feels clunky and limits creative freedom. With Animation Tree you can visually blend, layer, and sequence your animations at runtime—no extra scripting.
General Overview
Imagine setting up a run-to-walk blend, an upper-body aim overlay, and a one-shot attack all in one graph. Animation Tree turns those ideas into nodes and wires, so you see and edit your animation flow directly. This accelerates your iteration loop, keeps your code cleaner, and empowers both programmers and animators to collaborate smoothly.
Installation & Setup
- Select your Character Model in the Explorer.
- Open the Plugins tab and click Insert Animation Tree.
A new
AnimationTreeModule appears under Workspace. - Select the
AnimationTreeinstance to open the visual editor. - Publish your AnimationClips and paste each asset ID into the node’s
animation_idproperty.
Basic API Usage
-- Require and initialize local AnimationTree = require(workspace.AnimationTree) local tree = AnimationTree.new(characterModel)– Start the animation graph
tree:start()– Stop playback
tree:stop()– Reset all joints to bind pose
tree:reset()– Change a blend node at runtime
tree:set(“RunWalkBlend”, “blend_value”, 0.5)– Read back a property
local fade = tree:get(“JumpOneShot”, “fadein_time”)
– Listen for marker events on any node
tree:GetMarkerReachedSignal(“Attack”)
:Connect(function(markerName, param)
print(“Attack marker:”, markerName, param)
end)
Node Attributes Reference
| Attribute | Type | Description |
|---|---|---|
| animation_id | number | Asset ID of the AnimationClip |
| playback | string | "forward", "inverse", or "pingpong" |
| looped | bool | Whether to loop when reaching the end |
| sync | bool | Keep playback in sync with parent node |
| additive | bool | Use additive blending mode |
| fadein_time | number | Fade-in duration (seconds) |
| fadeout_time | number | Fade-out duration (seconds) |
| blend_value | number | blend factor (0.0–1.0) |
| autorestart | bool | Auto-restart OneShot after finishing |
| autorestart_delay | number | Delay before restarting (seconds) |
| fire | bool | Trigger a OneShot node |
| active | bool | Enable or disable OneShot playback |
Real-World Examples
- Run-Walk Transition: Bind your character’s speed variable to the blend_value of a Blend2 node. As speed changes, the node automatically interpolates between walk and run.
-
One-Shot Actions:
Use OneShot nodes for shooting, jumping, or gesture animations.
Set
firetotruein code when the player triggers an action. - Additive Layers: Overlay an upper-body aim animation on top of a base locomotion cycle without creating separate clips.
-
Event-Driven Gameplay:
Place markers in your animations for footstep sounds, particle bursts, or hit detection, and handle them with
GetMarkerReachedSignal().
Why Animation Tree Makes Your Life Easier
-
Faster Iteration:
No more juggling
:LoadAnimation()calls—see your blend graph in Studio and tweak visually. - Cleaner Code: Your Lua scripts just toggle nodes and set parameters; the animation logic lives in the graph.
- Team Collaboration: Artists can build and adjust the node tree while programmers focus on gameplay logic.
- Scalability: Complex state machines and blend spaces become maintainable as your project grows.
What’s Next?
BlendSpace1D node arriving soon!
Full BlendSpace2D support planned for v2.0
Cost
Free
Get It Today
Join the Conversation
Got feedback or ideas? Join my Discord:
Crypto's Lab
Thank you for using Animation Tree—let’s build richer animations together!
