Conditions for locomotion start/stop blendspace transitions

I have my Locomotion state set up like so:

What conditions would I need to set up on the state transitions between: Stand Idle → Stand Move Start, Stand Move Start → Stand Move, Stand Move → Stand Move Stop, and Stand Move Stop → Stand Idle? If I was working with only a forwards animation this would be a cakewalk, but blendspaces for forwards/backwards and strafe left/right movement make things a bit more complicated because I also need to play Starts and Stops for these directions and the ‘Time Remaining’ node doesn’t seem to work as expected on a blendspace.

Each State has a Blendspace set up like so:

So basically it’s checking Forwards, Backwards, Left and Right input to decide whether to play Walk/Run Forwards, Walk/Run Backwards, Walk/Run Strafe Left or Walk/Run Strafe Right animations. The Blendspaces in the Stop/Start states are NOT set as Looping, the Stand Idle and Stand Move states are set as Looping.

Some guidance with the transition conditions would be greatly appreciated.

This is a very advanced level that requires a deep understanding of animation blueprint setup.
For instance, you need to consider the type of movement input you are registering, whether it is velocity or an input action. Then, you have to determine the state of the movement by calculating the velocity and integrating it with the normal vector direction of the character’s movement. Afterwards, you will have to adjust the character movement speed by implementing animation curves inside the animation sequence. Grouping the sync of animation state will improve the result as well.

But you will have a much easier calculation if you are using root motion. Most developers will use root motion to address this issue, and it looks more realistic that way with accurate synchronization of animation and pre-defined movement speed.

Solution wasn’t particularily complicated but there are still some issues that need to be ironed out mostly with the Stop animation itself and some foot mismatching on the Start animation.

Firstly, the conditions for Stand Idle → Stand Move Start.

Basically checking whether we’re moving and our stance is Standing:

Conditions for Stand Move Start → Stand Move:

Here we’re checking for conditions to cancel the transition animation. So if the animation has finished playing, if the player starts moving, or the player has changed their stance. The transition conditions for Stops are set up the same as well, but with a slight change. Since we’re no longer moving, we can’t exactly pass the Forwards/Backwards or Left/Right floats into the Blendspace to play the correct locomotion Stop animation. We need to create a custom event on the Stand Move Stop state for Entered State Event:

Set up the custom event in the Event Graph:

Here I have it going to a threadsafe function that simply records the forwards/backwards and left/right floats at the moment the player leaves the Stand Move state.

Then we just use those floats for the Blendspace in the Stand Move Stop state:

Main issue that needs to be ironed out is the foot sliding on the Stop animation. The animation has root motion. ‘Enable Root Motion’ and ‘Force Root Lock’ are both ticked. Basically movement abruptly stops when the player transitions from the Stand Move to the Stand Move Stop state, rather than come to a stop based on the root motion of the animation.

Second issue is foot mismatching on the Start animation. I heard Sync Groups might be able to help with that, or am I looking at the wrong thing?

As I stated, root motion is the fastest and easiest path to do this. The complexity is much lower compared to the other method that requires a lot of checking.

You are not utilizing the root motion if you are checking “Force Root Lock” box. It means, you are forcing your animation to use in-place animation. This will not drive your character’s movements.

For your mismatching foot problem, I suggest you to use animation notify to your walk sequence animation like “is left foot” and place it around where your left foot is on the ground, vice versa. That way it will determine your state correctly.