The past 2 nights I’m trying to establish replication(replication is pretty easy for me now) with Animation Starter Pack, I did try to multiple state machine approach and see if I can figure out. But it comes pretty quickly that if you want to blend between 2 different set of animation, it’s better to use the style that order66 mentioned to use blend within your state with enum, you can always expand the enum and recompile to get the additional pins.
So, why not 2 state machines(in ASP there are a set of movement is rifle_hip, and another set is rifle_ironsight), the reason being you will see a lot animation glitches when you have toggle type of control, ie with ASP you have hip movement that includes idle, jog, stand jump, run jump, crouch. With ironsight movement you have idle, walk, crouch, stand jump. I also throw in the prone movement. Now, any time you blend between 1 state machine to another, the graph evaluates from that “entry” node. so if you set transition timing too long, or have animation that are not really compatible, you are going to get jumpy blend, not smooth blend. And after more and more conditions and animNotify come into play, it’s escalating too quickly to try add those extra booleans to shut off transitions and keep 2 state machines in sync. For example, when you start to prone, you can’t switch to crouch nor jump, you have to introduce a variable so when you toggle ironsight that new state machine taking over know which state to quickly blend into, if you didn’t do this properly, you will end up seeing stand_to_prone animation played again. With one state machien where all the states does the condition blend, you are free of such hassle and can focus on making the transition better.
There are also other gotchas like state machine transition really fast that animation played before the animNotify from transition rule can set a control variable to false.
My example would be during crouch you can’t not jump, however if you press jump during crouch, jump boolean is set, transition rule from crouch into idle will issue a event to unset the jump boolean but it will be too late and animation played, where the movement component don’t actually get to apply jump, but the animation is played regardless. So I still have to work this bit out or just re-do the jump logic that comes from ASP character’s anim blueprint. hours are easily gone when you have to carefully avoid sync and state glitches with more state machines. So stick with one main state machine like order66 says is your best bet.
And, if you are not happy with it, you can create another state machine with in the main state machine’s state. ie for idle/run state, you can create a state machine with in this state that are dedicated to handle what to output if it’s more complex than just blendspace nodes. This also gives you extra control without having to worry syncing 2 state machines.