i like how throughout the devlog you slowly get more and more confident about it
@eftorq3 жыл бұрын
I felt the same way. I'm so excited where this is going!
@linkunarre3 жыл бұрын
*start* -soo... I finally made it public... *End* -I LOVE THIS PROJECT ITS REALLY SIMPLE AND INTERESTING
@Rhino10043 жыл бұрын
From what I've taken from the explanation: Fundamentally, it performs the same task as a typical state machine animator, complete with functional keyframes and alternative sprite sets. One difference is that it's presented as a tree, though I would argue that you can arrange the FSM nodes to look like a tree anyways. Still infinitely better than my terrible If-Else scripts when I used to make Flash games (RIP). I can imagine people working well with this in a Game Jam over Unity's built-in animator.
@aarthificial3 жыл бұрын
Well, my main reason to create Reanimator was to keep a consistent animation frame rate. Which is something that blend trees can't do. Different representation is more of a side effect
@IPODsify3 жыл бұрын
I think this type of animator is something unity legitimately needs because a lot of games have animation cancelling as a core mechanic and doing that with the current unity animator is hellish
@mingyenwu96213 жыл бұрын
The idea of turning animation state machine into a tree structure is very inspiring, thank you for sharing!
@igrb3 жыл бұрын
I love how tight and well thought your projects look even at early stages, nice work man. also, looking at that tree like structure, this will probably be the next animator in my heart when it gets a visual interface just by the fact that there will be no dozens of lines crossing each other
@janmagtoast3 жыл бұрын
Interesting. Today I was working with godot thinking about writing a similar system (for 3d in my case). Using Statemachines for animations is just really horrible when you already have a hardcoded statemachine for your character movement. Thanks a lot for sharing this. This gave me a lot of new ideas on how to implement a similar thing in my beloved godot.
@aarthificial3 жыл бұрын
Glad to help!
@blueberrygames3213 жыл бұрын
Hey man, I'm currently taking several Udemy courses so I can learn how to make games, my eventual goal is to get into 2D game development. This tool appeared at what feels like the perfect moment; as one of the things I was warned about was the transition hell you describe here. Thank you for the informative video and I really hope to see your channel grow and I hope to learn from what you provide.
@aarthificial3 жыл бұрын
Thank you so much and good luck on your gamedev journey!
@tiredko-hi-3 жыл бұрын
Beautiful... I will definitely use this if I start a new project
@IgorKaratayev3 жыл бұрын
I see it as basically a different presentation of an animator state machine. And that is great, because it is much cleaner way to navigate it. And it can be quite possible to make a different Animation State machine visualizer for unity.
@VuVuuInc3 жыл бұрын
unity animator kinda dog, so I shall say this IS the next animator. good job, very pog!
@Jacob-ux2ni3 жыл бұрын
Taking all of the little lines out of the REANIMATOR logo spells PEPAINPTOP.
@WuchtaArt3 жыл бұрын
Im not using Unity, but this approach to animating is very interesting
@DockFrankenstein3 жыл бұрын
When I worked in 2d first thing I always did was to code my own animator, since the unity one was always messy and not cooperative. Now I work mostly in 3d but cool tool my fellow stranger
@nankinink3 жыл бұрын
Looks pretty solid for a 0.0.1 version! Definitely gonna try it in my next jam in june!
@rougenaxela2 жыл бұрын
I'm reminded of how I once built a simple little animation system, where my solution to avoid state machine hell was to just have a small list of "base" animations, and then have a list of "animation modifiers" that could be applied, in priority order. The object being animated could have tags for any number of modifiers set. Each modifier consisted of simple a list of frame substitutions that would be made. This didn't have the flexibility to let your modifiers change the length of an animation, but due to how the modifiers were processed in priority order, they did kinda make somewhat of a tree like this.
@hyeve21142 жыл бұрын
Not sure why I ended up here, but it's a really interesting tool. I feel like you overlook the power of the built in animator somewhat, though - transition hell is only what happens if you attempt to handle your state logic inside the animator. One easy and effective way of dealing with it, is to simply refactor the different animation transitions into a much simpler tree, or even just a list, and control it with a small set of parameters. Instead of each animation needing a transition to each other animation, make each animation accessible from the "Any State" node, either directly or via a tree of parent nodes (make sure to disable "Can transition to self"!), and bam, you can have precise and simple control over your animations, via your actual in-code state machine. This system absolutely still has some advantages in some ways, and it's a really interesting way of handling it, but the built-in animator can be pretty good too, as long as you know how to tame it :)
@aarondcmedia95853 жыл бұрын
Good luck with your exam! Maybe I am naive, but it looks to me like you created an animation state machine with a different facade. It doesn't _look_ like a state machine, but under the hood, that's exactly what it is. Regardless, what you have produced looks efficient.
@aarthificial3 жыл бұрын
Thank you! My grasp of the subject is really poor, but I suspect that reanimator may not only be a state machine but also some higher class of automata? Given the fact that its memory is technically unlimited (maybe it's even turing-complete?) Still, I sure hope that it is at least a state machine cause that would mean that any animation system made with the builtin animator could be migrated to it!
@LukePlaysGames3 жыл бұрын
“Not gonna lie, it’s a chunky boi” ...oh my
@BrokenPuzzle033 жыл бұрын
You are amazing. Wish you the best in all of your projects!
@aarthificial3 жыл бұрын
Thank you so much!
@konstantinkh3 жыл бұрын
It really looks more like a different way to store and traverse the FSM than something conceptually different, but sometimes that's all you need to go from a very messy visualization to a neat one. Kind of like behavior trees aren't really that different from FSM AI, but can be way easier for designers to work with. I can definitely see this working for keyframe animations as well with some minor modifications. Neat approach all in all. 👍
@monad_tcp3 жыл бұрын
But this is a FSM, actually, what he made is more FSM than what unity has. just go look for VFSM and read some of the original papers that are as old as me, from the 1990s. FSM can be hierarchial. Virtual Finite State Machine
@konstantinkh3 жыл бұрын
@@monad_tcp If it runs on a computer, it's technically an FSM. I think it's useful to separate out what we conventionally think of as FSM in game design, which is essentially a graph of states and transitions, vs other representations which are all still, technically, FSMs, but have some unique characteristics. Again, there's a reason why we specify behavior tree AI vs FSM AI, even though both, technically, are finite state machines.
@monad_tcp3 жыл бұрын
@@konstantinkh yes, what I was trying to say is that what people think of FSMs, even in game design, is more restrict than the actual mathematical formalism. I don't know who simplified it too much that it became too trivial. For ex, things you can do with FSM, you can cascade them, a single state of a FSM can be an entire another FSM, you don't need to use all your application state for the FSM, you can have "virtual FSMs" that only deal with part of the application. It doesn't break the formalism. If you are interested, search for xstate js, its for javascript, but don't worry, it covers the concepts very well. As with anything, a tool is good for some things, not everything. But FSM is more useful than what people think, if used proper, ironically, with less arbitrary restriction.
@konstantinkh3 жыл бұрын
@@monad_tcp In my experience working with designers, sometimes restrictions are a good thing. It's kind of a mixed bag. Like, a more traditional anim graph gives you ability to have more control over transitions. It doesn't matter for simple anims like in this presentation, but for more complex games, if I go into a jump anim, it matters, at least for a few frames, if I was standing still, walking, or running before. And so the anim graph is meant to address that with a more complex FSM, but the downside is that now designers use that graph layout for everything and you end up with a nightmare. Having a setup that forces you into a cascade limits what you can do with it, but prevents these nightmare scenarios from developing, and if you don't need complexity for your game... But ultimately, we need something better. I mean, there's the high tech solution of motion matching or even deep learning, but that has limitations as well. We kind of need a different paradigm for laying out animations, so I'm glad examples like the one presented in video are showing up. Even if all they are doing is limiting scope of FSM to try and clean up the flow. This isn't a solution that will work for all games, but maybe it will help someone to think of something better.
@monad_tcp3 жыл бұрын
@@konstantinkh Restriction is a good thing, its a balancing act, that's for sure.
@FireNLightnin3 жыл бұрын
You're probably the most innovative game developer I've ever seen.
@DecrareOld3 жыл бұрын
That's neat! I might even be able to use it in one of my projects
@frasercurry78193 жыл бұрын
The animator controller is quaking in its boots
@Ziboo303 жыл бұрын
That looks great ! One note, might be good to have drivers as empty ScriptableObject and not strings. Beyond the scene you could still use string if needed, but at least in the inspector the user will reference a SO and not write a string which is error prone. It's also more data driven :)
@aarthificial3 жыл бұрын
Thanks! Totally agree, I hate the fact that drivers are referenced using strings. I really like the idea of using SOs, reminds me of timeline signals. I'll try to roll this out together with the visual editor since it requires some breaking changes anyway
@PiyPowKachou3 жыл бұрын
@@aarthificial By the way, it might help you with organization, I do not totally understand how this system works yet, but you can make SO a child of another SO, so called sub-asset. It's just an organisational thing for the project files, sometimes there are too many SO in folders and this helps to organise them. Anyway, not sure if it will be any help or if it applies to this situation, but just sharing info that this thing exists. I want to do a metroidvania game in the jam next time and I am planning to use this :) Hopefully I can get how it works. Great job!
@aarthificial3 жыл бұрын
@@PiyPowKachou Thanks! Of course, it will be a help. I actually used sub-assets in the past, in my passage system: kzbin.info/www/bejne/kJvJmXp7r854e80 They will play an important role when introducing a visual editor since I want the entire graph to be represented by a single asset, with nodes and drivers being stored within. Thanks again and good luck with your game!
@PiyPowKachou3 жыл бұрын
@@aarthificial That is awesome, I have used them before, but I had some weird bug with first SO interchanging with main SO asset for some reason, hopefully it was fixed, it was a year ago, ha :) Looking forward to it!
@powerzox83263 жыл бұрын
Dang your videos are high quality! Thanks btw :)
@aarthificial3 жыл бұрын
Thank you, too!
@hakler3 жыл бұрын
Such a nice system :D Thank you for the explenation
@LutennantLongshot3 жыл бұрын
Its super cool you made this into a tool. I'll defs look to test this out in my own projects as I was facing similar issues you had with Astortion
@bantinggamer49623 жыл бұрын
very very neat! i cant wait to play around with it. thank you so much for making it available.
@pranavbadrinathan66933 жыл бұрын
I have been searching for this video for a while now, as I really wanted to use this in a game jam. It looks great!
@marrubium85592 жыл бұрын
Okay not going to lie this is actually exacly what I was looking for.
@SK83RJOSH3 жыл бұрын
So, essentially behavior trees, but for animation? This is definitely interesting but it's definitely more useful for the pixel art use case than anything else. I also think you'll find plenty of games are already using this to drive animators in larger games -- indirectly anyway -- since they use it for AI state. Very cool though, thanks for sharing!
@windbreaker1710 ай бұрын
Very cool idea! It looks amazing before you try to use it, and unfortuatelly it's super hard.
@FyresGames2 жыл бұрын
Well seeing that project just gave you a new subscriber. I will definitly test it.
@arnerademacker3 жыл бұрын
I was just yesterday struggling animating a sprite using unity's state machine. This might be a better approach for the simple use case I have :) Interesting either way.
@tauheedgamedev23883 жыл бұрын
Very nice tool, Iv had my fair share of issues with the conventional animator so may have a look.
@MichaelGGarry3 жыл бұрын
"Its a chunky boy, 300 lines" Laughs in professional game developer who has seen many things! I think my personal record that I have seen (NOTE: I didn't write) was 14,000 lines. In one class. One. I can't say what it was, but its in a *very* famous product.
@briantellstales3 жыл бұрын
@Richard Müller I doubt it. That game is mega small code-wise.
@iMakeOnionsCry3 жыл бұрын
Sounds like a Yandere dev thing to do lmao
@mdo3 жыл бұрын
One of the products I'm working on has over 12k lines of code as code-behind in a single WinForms form. Intellisense is disabled for that file for obvious reasons.
@MichaelGGarry3 жыл бұрын
@@mdo Oh the days of watching intelligence die and take most of the system resources with it!
@charlesselrachski343 жыл бұрын
half-life 3
@hiiambarney44893 жыл бұрын
I mean... To be honest, you are very humble about this, but if this was done in Unreal, I'd say you'd have a reasonable chance at getting an Epic Mega Grant for that one... So Unity better see this as "oh we kinda ducked up" and give you Unity Pro for free or something...
@eboatwright_3 жыл бұрын
I love the animation on the platformer character!!
@brooksli42963 жыл бұрын
It feels like a behavior tree? This is a really good animator!
@steveramage7674 Жыл бұрын
This is very cool, you might want to check out the Godot engine it has animation player and animation tree node objects natively built in to the engine that use a very similar pattern. The animation player is a visual tool that allows you to build a bunch of frame based variable timed animations that connect sounds, property changes, apply shaders, fire event, move hit/hurt boxes to be in line with the animation and more on each frame. The animation tree node is where you can visually setup state or blend based animation trees that can control which tagged animations play and what parameters in the scene or events cause them to transition. (as an added bonus if you use aesprite to draw your cell/frame based animations there is a wizard add-on which will allow you to import/re-import your tagged aesprite file into a set of tagged animations directly into an Animation Player node so you can change tweak your animations in aseprite and then re-import)
@goodfacej43133 жыл бұрын
well idk why youtube brought me here but cool vid man!
@AhmadHamdaniazure3 жыл бұрын
Waw this is awesome, recently I always get problem with unity animator, awesome solution love to learn more from you :D
@squirre1_m4ster22 Жыл бұрын
I love all ur vids it they are all really interesting and dont get boring yet they are super conplex and cool
@arrtemfly3 жыл бұрын
thanks for doing FOSS stuff!
@rasulseidagul3 жыл бұрын
Hey, this is a cool tool. I think it would be even better if drivers would be referenced as scriptable object not a string. In this case, it will be easy to: rename driver, delete driver and remove it from animation references. Otherwise, it could lead to the "strings" hell 😅 (e.g. string typo)
@aarthificial3 жыл бұрын
Totally agree! With the visual editor I wanna make it so that you define drivers in one place and then everywhere else you just have a dropdown with all the possible drivers. Similarly to how it's done in the built-in animator. Of course, under the hood it will be just scriptable objects stored as subassets
@rasulseidagul3 жыл бұрын
@@aarthificial Awesome 👌
@ricardorios92583 жыл бұрын
really cool you do all of this just for the hate of the state machine. I just use a blend tree and my suffering go away, but cool to know there is an alternative
@aarthificial3 жыл бұрын
Thanks! Although I actually don't hate the state machine, it's a really useful pattern but the way it's implemented in Unity is really clunky. The main reason to create Reanimator, however, is to achieve what I call "frame rate synchronization". I talk about this a little more here: kzbin.info/www/bejne/pHKVenaeq96Sh7c
@FlummoxTheMagnificent Жыл бұрын
Can you make a tutorial/basic guide to how you went about programming this?
@spikerthedragonbear2 жыл бұрын
im surprised this wasnt done already
@pup43013 жыл бұрын
More please if you don't mind.
@simon-olivierdesautels26193 жыл бұрын
YOU DID IT! Thanks a lot!
@agostres3 жыл бұрын
this makes me happy
@BastianTop3 жыл бұрын
Dayum! Next level stuff!
@Samwow3 жыл бұрын
Cool stuff!
@editdev3 жыл бұрын
pog championship
@papermartin8793 жыл бұрын
might wanna look into xNode if you wanna make a graph animator for this, seems like it'd be a perfect fit it's designed mainly for this kind of "function" graph
@ehrenmurdick2 жыл бұрын
This is still just a normal FA -- DFA, hopefully -- but conceptually, it's still the same thing, right? At the end of the idle animation, it jumps back to the first animation state again, so that's just a hidden invisible edge. I would like to hear back after you've been using it for a while to see if it really improves anything... I suspect you can get into the same (and maybe worse) SM hell as the older method. I could see how just the visualization part of this could help keep things organized; though, I also suspect the same thing could be said about the same visualization for an SM.
@ziccodx3 жыл бұрын
yees, custom editors!
@04tmoodyscratch243 жыл бұрын
Awesome!
@aarthificial3 жыл бұрын
Thanks!!
@Guitoon3 жыл бұрын
Nice idea of animation structure ! It would be a very cool upgrade if it will be editable in a unity graph view editor window. ^^
@DiauloXD3 жыл бұрын
very green, but with a lot of potential
@vvortex1573 жыл бұрын
cool, keep it on
@FireyDeath42 жыл бұрын
Yeah...I just flew through this video understanding maybe 2 things. Gonna stick to learning crap myself, thank you very much.
@sinus47843 жыл бұрын
Love your videos!
@jz9991z3 жыл бұрын
Reminds me of behaviour tree
@relt_3 жыл бұрын
when you do the thing 0:00
@DaydreamStudios_Official2 жыл бұрын
💖
@stevenunderwood9935 Жыл бұрын
👏👏👏 This is so cool.
@Balawi283 жыл бұрын
I'm proud of you.
@ALX33 жыл бұрын
Great job! Is it possible to make a tool that converts your Graph to a Unity State Machine? like a wrapper or something; so people work with intuitive graphs and the tool handles the conversion to complex state transitions.
@aarthificial3 жыл бұрын
Thanks! It may be possible but I'm not sure. I don't think everything would work since Unity State Machine can't really modify its own state in a way Reanimator can. Perhaps if you were to generate both a state machine and some additional C# script
@Exerionius-old3 жыл бұрын
Ever heard of xNode for Unity? It can help turn the infographics used in this video to an actual process of setting up your reanimator.
@aarthificial3 жыл бұрын
Thanks! I'll check it out. I was also considering using Unity's GraphView
@Exerionius-old3 жыл бұрын
@@aarthificial Can't say anything about GraphView, never used it. But xNode is just a bare-bones framework that gives you an ability to visually represent nodes, define ports and connect them, that's it. It does not evaluate the tree, does not pass any data between nodes, nothing. Because of that you can turn graphs built with it into anything, like AI decision tool, state machine, shader graph, dialog system, tree evaluation, etc.
@idoaharon29432 жыл бұрын
you are amazing
@mmheti2 жыл бұрын
I love the concept. My only concern is: magic strings everywhere :o Why not make a drivers ScriptableObject and add a dropdown drawer to pick them from the list? You wouldn't need to remember how tey are named and would eliminate any typo related errors.
@agostres3 жыл бұрын
O.O solid bell
@sadsadsad5000 Жыл бұрын
what if i want to edit a property at a certain frame, like the boxCollider size for example?
@konakonaxiong76213 жыл бұрын
跑步的姿势好奔放……好魔性……
@lechu2a Жыл бұрын
How would you handle this for a Topdown game, where you have multiple directions (most commonly 4 or 8). Would you make different animations for each direction and use a switch node and a driver for it? Transitions are truly complicated, would love to see how you would solve that in the future by creating a transition node that handles the complexity automatically. All your content is excellent, hope you are well and we get to see more from you on the future. Good luck with Astortion!
@alvarogimenez76833 жыл бұрын
Genio!
@AlmantasKli3 жыл бұрын
neat!
@beanmr86433 жыл бұрын
👍
@teamjoy19683 жыл бұрын
N1ce
@ektorz3 жыл бұрын
Interesting video and nice choice of music, what song did you use?
@aarthificial3 жыл бұрын
Thanks, it's: Stationary Sign - Not Sure What You Mean kzbin.info/www/bejne/n17ZcqpuqMShnpY But just the bass line
@ektorz3 жыл бұрын
@@aarthificial Great, thanks!
@ibpositive7573 жыл бұрын
Did anyone else have trouble with trying out the unity project? (version 2020.2.0f1) The PNGs were all giving me errors and the references were all unlinked in the editor.
@aarthificial3 жыл бұрын
PNGs are stored using Git LFS so you would have to clone the project with it installed. I didn't realize it would cause the zip file to be broken :(
@ibpositive7573 жыл бұрын
@@aarthificial that did fix it for me, thank you!
@MarcosSilva-il2cm3 жыл бұрын
How a transition work in a 2D frame for frame game? For me the state machine help to create transitions between 3d bones and 2d tween animations
@aarthificial3 жыл бұрын
With traditional animations there's really no concept of transitions. You just instantly start playing another animation. You can use transitional animations that I've shown at the end, though. But these need to be hand-drawn. When it comes to tweening and blending skeletal poses, Reanimator is not the best choice
@nickheyer2 жыл бұрын
Interesting, but also a bit over my head at the same time.
@HaxorBird3 жыл бұрын
I am working on a game with player customization. The built-in animator just doesn't work with my game. I am also making an animator for this purpose. Your animator will influence it a little but I think the same result can be achieved by other methods. I don't fully get the driver thing. It will be good if you can create a documentation for it. Overall an interesting take.
@jdigi783 жыл бұрын
Really interesting concept and well presented, but I don't see what this system can do that unity's default system can't. You mentioned how it avoids a web of transitions by using a tree system but that's almost exactly how blend trees work, the states are like the root of the tree. Syncing things with animations like footsteps can be done with parameters baked into the animation as well
@aarthificial3 жыл бұрын
Interesting. Have you tried to actually modify the provided example so that it uses blend trees?
@pilhamre91823 жыл бұрын
Hey, do you know if you could reanimator working with Mirror, the multiplayer extension? To make the animations sync between clients, I can’t get it working.
@aarthificial3 жыл бұрын
Hi! I don't know, unfortunately. I haven't thought about networking yet :(
@josejimenez-wd5rw3 жыл бұрын
Cool
@Saalach-Spiele3 жыл бұрын
This animator is so very amazing!! So glad to have found you. I'll definitly use this as I've been thinking about how to implement something like it ever since I saw the hardcoded solution by Lost Relic Games here: kzbin.info/www/bejne/pHPOmoaAat9gnqc
@sadsadsad50002 жыл бұрын
are you still updating this? a visual editor would be awesome
@vedrane03 жыл бұрын
No way he actually did it
@RandomGuyStr3 жыл бұрын
L e g e n d
@LuneDeRafal2 жыл бұрын
I want to use the mirrored but it doesn"t work TT, it play it like a simple animation
@Yipper643 жыл бұрын
0:30 wait unity doesnt do that automatically... and before this there wasnt an easy way to do this....? Fricken, im kinda glad ive been using GMS ngl.
@aarthificial3 жыл бұрын
Yeah, Unity's animator isn't really 2D oriented. Could you point me to some GMS documentation that describes how it works over there?
@Yipper643 жыл бұрын
@@aarthificial manual.yoyogames.com/ is the manual, idk if there's proper documentation but you just put in a spritesheet and it creates a "sprite" file with all the separate sub images. You attach the sprite to an "object" and it plays it. Or you do a "draw_sprite" command that takes the image index as an argument.
@monad_tcp3 жыл бұрын
300line is chunk ? the irony is that I just finished rewriting 2000lines of code mutable spaguetti imperative code to be 1000 lines of beautiful state machines ! some say it was a waste of 10h of work, but it was easier than finding the deadlock
@arsenbabaev10223 жыл бұрын
Can this kind of custom animators be faster then unity animator component? I feel like unity animator has a lot useless featured for 2d sprite animations
@arsenbabaev10223 жыл бұрын
Why use animator when i can swap sprites myself)
@aarthificial3 жыл бұрын
Interesting question. Haven't tested that unfortunately. It could be the case, but Animator is implemented on the C++ side so it probably doesn't need a transition from managed code to change the sprite. Unlike changing it via C#. So that could be a huge performance benefit for Animator. I'll try to test this in my free time.
@B1aQQ2 жыл бұрын
I also keep my important stuff in a Jeff folder.
@Edyremoh9 ай бұрын
me, watching without knowing the first thing about game development: interesting.