AnimationTree | Edit and mix your animations before and during run-time easily with the new tree node system

I’m Crypto(ZDevZ12) and I created a new system to play and edit your animations just by connecting some nodes.

ezgif.com-video-to-gif


What is this for?

This plugin is used to play animations without having to load each animation individually, instead… you do it visually and everything is ready for use when starting the game.

Why would I use this and not the Roblox animation system?

Because roblox animations are very simple and have many limitations, that’s why I made my own animator that allows you to do much more advanced things than just modify the “weight” and “priority” property of the animations, with my animator you can add one animation to another, mix them or get the difference between them.

Is this a revolutionary idea?

YES!, in all my years as a roblox developer I have never seen before a resource that would help you build and order your animations in an advanced and efficient way!.

This is new in roblox, however I’m basing myself on the animation systems of video game engines like unity, unreal and especially godot, they don’t load one animation at a time to the player, they use similar systems to this where they can have more control over all the animations.



after reading the above text:

How can I use this?

  • First, you must create an “AnimationTree”, to create it you just need to go to the plugins tab inside roblox studio and click on the “New Tree” button, this will generate a new module called “AnimationTree” that will be available in workspace and You can edit by having it selected and clicking on the “Edit Tree” button that is next to the previous button.

  • all your animations must be published to Roblox , then you must generate some “animation” nodes and place the id of your animation right in the space that is inside the node called “Animation Id”

and Congratulations, you’ve saved yourself the time of loading animations individually by using :load_animation.

  • now… you must understand that what the “output” node receives is what will be applied to the character so you must mix everything very well before sending it to the “output”, output only has one input so if you have more than two animations you should mix them before sending them to output.

  • Check out this godot video from 0:30 onwards to better understand how animationtrees work.


Tree Documentation To make the tree start playing the animations:
local AnimationTree = require(Animation_Tree_Path).new(Character_Model)
AnimationTree:set_character(character)--It is not necessary if the character has been set on the previous line

AnimationTree:start()

--if you want to stop
AnimationTree:stop()

--if you want to reset all motors6D cframes of your character to the default ones
AnimationTree:reset()
and if you want to edit or get a property of a specific node:
AnimationTree:set(Node_Name,SettingName,Value)-- or 
AnimationTree:get(Node_Name,SettingName,Value)
Nodes Documentation
  • The Looped button of a node can be configured using AnimationTree:set(Node_Name,Looped, Value )
    and its value can be true or false

  • The Play button of OneShot node can be configured using AnimationTree:set(Node_Name, Fire, Value )
    and its value can be true

  • The Stop button of OneShot node can be configured using
    AnimationTree:set(Node_Name, Active, Value )
    and its value can be false

  • The Sync button can be configured using
    AnimationTree:set(Node_Name, Sync, Value )
    and its value can be true or false

  • If you want to set a Fade In you can use
    AnimationTree:set(Node_Name, FadeIn, Value )
    and its value can be 0.0 to 1.0

  • If you want to set a Fade Out you can use
    AnimationTree:set(Node_Name, FadeOut, Value )
    and its value can be 0.0 to 1.0

  • If you want to set a Slider you can use
    AnimationTree:set(Node_Name, BlendValue, Value ) .
    In a common slider, the possible values ​​are from 0.0 to 1.0, however in the TimeScale node the default value is 1.0, so the possible values ​​are from 0.0 to 2.0

New Nodes

  • In a new update, the WeightScale node has been added, with which you can edit the weight of each body part separately, setting the weight of a specific body part is more complicated, that’s why I’ve set a function directly in the animation tree:
    AnimationTree:set_weight(NodeName,Place,PartName,Weight) and
    AnimationTree:get_weight(NodeName:string,Place:number)
    where the “Place” is an integer that indicates the place where the body part is located , it is mainly used to sort the spaces in the node editor, and part name and weight are the values ​​that are placed within that place, and get_weight will return a table with the name and weight placed in its place.

Cost: FREE!
The latest roblox updates are :poop:. who would want to spend dollars on a roblox plugin?? NOBODY. Thanks to the people who spent 350 robux to buy this addon, seriously… I appreciate it.

Plugin:
Animation-Tree

My Discord Server:
🧬Crypto Lab 🧬

Thank you for purchasing this plugin, if I am missing information let me know on my discord server


95 Likes

This has to be one of the most complicated, yet satisfying ways to make your animations…

7 Likes

It’s not that complicated! You only need a couple of lines of code, once you learn how to use the tree you won’t stop using it!

1 Like

Are there any caveats to this? E.g. breaking replication, poor performance, difficult to integrate into an animation controller, etc.

What happens if you mix this approach with using the typical Roblox way of handling animations?

Also, how are you doing the animation blending?

4 Likes

Every day more I work to optimize the code.
There isn’t one thing right now that I think would hurt performance that much.

There is no replication because it would be a big charge to do it myself because every frame I have to send signals to the server, roblox has limits, you can’t do something like that i believe, I tried it once and roblox gave me a warning for excessive signals. There are other ways to do this but it is not necessary

if you want your animations to be seen on the server and client just run them on the server, If you want them to only be seen on the client, run them on the client.

The module is saved in a line of text, inside it contains a table that is ordered, the nodes that are connected to the output are its children And so on with the other nodes.

Each node has its functionality, so I had to make a recursive function that checks all the children and those children check their children. An interesting fact is that each branch/subbranch It has to end with animations, So I just went through the children of the children until I found animations and i applied the functionality of the parent nodes in this

It’s a bit summarized.

1 Like

I’m sorry, but I’m not going to use this. I’d much rather wait for ROBLOX to release additive animations.
(The only reason I said this was because I was pinged)

1 Like

This system is not only for additive animations, it has other nodes like diff2 that gives you the difference from one animation to another,Or you can also edit the weight of a body part individually, you don’t have to edit the whole weight of the animation
you can do almost anything with this plugin.

2 Likes

Does this work with custom characters? or non-characters as well? like rigging a box and animate it opening and closing.

Yes, this works with anything that has motors6d and a humanoidrootpart

1 Like

This should definitely be available on default’s Roblox animation. Imagine expanding this even more into animating objects without rigs using only position, and rotation data.

1 Like

Thanks for the mention, very nice stuff going on here.
I just skimmed through the post but im not seeing anything on if this would just “work”.
Does this modify the motor6ds or does it still use roblox’s animation system in the end?
Does it replicate automatically like default?
I’ll have to mess with this later.

I made my own animator that modifies the cframe of each part individually, so there is much more flexibility than using roblox’s load and play system, currently there is no replication, If you want to play animations and you want everyone to see them just run the script on the server, But if you just want to see them yourself, run them in the client… replication within roblox is great, but i can’t afford to send signals to the server every frame… Maybe look for some way to achieve this like create another animator on the server and send signals only when the client edits the nodes properties, I’ll add this to my to-do list, i Will think about it.

1 Like

Update!

Several big bugs have been fixed, I’ll try to test a plugin before posting it next time lmao
Fixed that when you changed the name of a node, it stopped working.
Fixed Sync button resetting on all nodes when exiting and re-entering the tree
Fixed some errors in the display of the character that caused you to not be able to rotate or move the camera
Now if you play the Tree on the client, the tree will run with RenderStepped, before it ran on server and client with Heartbeat.

Added a new node called “WeightScale”, with which you can edit the weight of a body part individually from the animation
Added “Additive” option in “OneShot” node, now you can play additive animations at any time you need
Added “Sync” option to all nodes with slider bar.
Added a skybox and a grid to the character display (I don’t really like the result but it looks better than before)
Added the :set_weight and :get_weight functions to the Animation Tree to make it easier to use the WeightScale node

The nodes are self-described, play with them and you won’t need to read documentation
The WeightScale node has two built-in buttons (+,-), the add button will add a new space where you can write the body part and its weight, and the subtract button will remove the last space created.

I decided not to add replication, since there are several ways to achieve this and the module is really easy to implement on your own replication system, so if you want to replicate your animations then I recommend you do this:

Place your tree in a place where all clients can see it
Send signals from your client to the server and from the server to other clients
In the signals you must send the configuration that you have changed
Each client must have a tree running with your character, every time they receive a signal from you, They should apply the configuration to their tree

Or you can simply run the tree from the server (which I would recommend this) but if your game is third person or you need speed in the animations I recommend replicating in the previous way

As I said, there are several ways to replicate and each way adapts to the style of your game.
My plugin was not built to replicate, it was built to make it easy to mix cframes, which are the animations.

Thanks to the people who have bought my plugin, please join my discord to help me find bugs and improve the project.

4 Likes

To blend my animations smoothly do i need to tween the value manually or this plugin do it for me?

I work on a game using chickynoid and the way you can replicate animations to other clients are so limited but with this resource, I feel like I could simplify a ton of work since I can directly edit animations with the nodes rather than having to replicate every tiny change.

I am purchasing this.

You simply give the data to the animation tree so that it is updated in the next frame.
I assume when you said tween you meant a fade, so a fade is available in the OneShot node, Otherwise you will have to edit the bar value yourself.

1 Like

I think I’ll add replication, replication is the only big problem I current have, I’ll be talking about it on the discord to find a solution.

No I was saying that, I find it easier to create my own replication systems now with this plugin, even if you added replication it wouldnt do anything for me as my character models are completely client sided, and the server just sends clients the animations currently playing so each client plays them on their copies of the characters.

error that appears when trying to play the one shot node
image

Enter my discord, I need more details