I start this topic because seems impossible to find any kind of tutorial, guide or topic about animal locomotion (apart from rootmotion).
I’ve tested rootmotion and isn’t at all what i need (no flexibility for movement speed, turn or pivots, hard to replicate, etc).
I’ve tried distance matching, but all the tutorials, guides or plugins are focused on humanoid characters, usually 8 direction movement (i don’t want strafing) and aren’t even complete, so i find myself on a dead end at some point far from the result i want.
After watching some videos and demos about motion matching it feels like the best way to achieve it but it isn’t that flexible since it uses a pose library and the animation play rate can’t be changed in runtime.
To put it in perspective, i take as example the game i’ve seen with the best locomotion for animals (for me), The Isle Evrima. Anyone has any idea of how they did it or how to achieve something similar that feels natural and also responsive? It looks like distance matching for me but i can’t even get to the point where my character turns, stops and changes direction like that.
Well i made it so that if the animal gets to -37 or 37 direction it activates a function in character blueprint. That function slows character down. And the other function when turning is inactive, it makes a finterp to node to get back to normal speed SMOOTHLY. (Turning anims are in the base blendspace.).For braking its really similar. i play evrima too its really amazing
That activation function happens in anim bp*
also mess with deceleration speed in movement component and acceleration speed, they affect rhe turning a lot
As doplerwastaken said all animations are in the same blendspace. Horizontal Axis is -180 to 180.
Vertical is the usual idle at 0, 0 to sprint at max and whatever speeds in between.
Animations forward left and forward right at -45/45, all speeds except 0.
Turn in place 90 from -60/60 to -90/90, all speeds.
And turn in place 180 at -120/120, all speeds.
That’s the logic, the values work for me (for my only character as of right now at least) but needs a lot of test and repeat depending on the desired turn rate, which would need different values on the curve, different interpolation speed to calculate the direction, play rates for the animations, smoothing times for the blendspace, etc.
Ive made it amazing like literally amazing, still isnt exactly same as evrima but its close. First off ofc there has to be different values to turn/brake when running or trotting. Turns should be a blendspace 1d and 2 blendspaces left and right. -180 to zero for left, and 0 to 180 for right. 90 degree should be in 5 something, then again 90 degree turn in like 106.something value in blendspace, then immediately 180 degree anim right after the 90 degree, which islike 112 value. Then, everything should be with an interpolation. for me btw turn rot speed walk rot trot rot run rot is compeletely different but they arent interpolated. And, the most important part, turning should take in place if you are REALLY turning.Basically when you are going tooo left (or right) it should first smoothly go to walk, then turn. if you are running the same should happen with interpolation lol.
But then i ran into an issue Evrima has, dino snaps between turn and walk a little when you are in the border of it.
Anim Graph is like this btw, I DONT have the idle anim in the blendspace, i have a locomotion machine state and a cache pose of it, that state machine has the idle and the transisiton to the blendspace. so that it can reset time of blendspace and restart when it actually had to. I made 2 turn blendspaces so that each blendspace can change between without stripping the other turn anim’s frames and making it “smooth”. The transition rules are like get the bp class of char , if turning and blabla.
Btw turn brake turn stop functions are no longer in anim bp coz its so much of a code now, its in the dino bp. Yea im making a dino game and allllll these values changes with growth lmfao
I have made a system (not released) to create realistic quadruped animations. It is mostly procedural and need only 1-2 animations to function. I plan to expand it to have a fully procedural capability with artistic control
not worth 40 dollars at all. its a system relatively easy to code. use anim notifys or timeline clamps and def dont use turns in your main blendspace. slides the are easiest thing to do. learn to start and stop montages according to logics and learn to use if statements lol
FINALLY, finalized the system.
It sadly works waay too similar to evrima, but it works.
Your main movement should be based on “circling” turning method (The Isle Legacy", and based on your direction it should turn in place or not. Get every variable that changes your velocity (Walk,Sprint, etc.) and set them to connect to Map Range Clamped. Value will be that variable, In Range A will be 0, or the value you desire for the slowdown angle start of turn in place, In Range B will be the *angle that you turn in place. Out Range A is your (I dont quite remember but its one of these) Max Walk Speed from Character Movement, (or the movement component you use to get the desired velocity), or (low chance) GetVelocity node, Out Range B is 2 but its the speed you want WHILE turning in place, so it should not be 0, to rotate.
This way your speed is ranged accordingly to your angles and supports turning in place. **(FOR THE ISLE EVRIMA ASSETS → ) Also, if you use the “circling” method (which you should), it will be restarting to move after turn in place is finished, without sliding.
Animation part, I dont recommend it for now since im working on a better system, but I am using
> TWO 1D Blendspaces
for both left and right turning for both 90 and 180 degrees.
For example left blendspace: Horizontal Axis: Turn Angle (Direction) Minimum Value: 0 Maximum Value: -180 Anim Keys: -180, TurnL180. -105, TurnL180. -104, TurnL90. -2.5 (to not mess with the other blendspace), TurnL90.
I should take a look on this post more often lol but well haven’t paid attention to locomotion for quite a while. But i’m quite interested on your approach, i doubt i could replicate it cause i get kinda lost reading it like that tho so if you don’t mind sharing screens, or let me know if you prefer to contact privately (i’m also making a dino game or trying to lol)