I’d like to put together some “paired” animations with looping and some random variation, e.g. a smaller character riding another character, similar to Master Blaster from Mad Max (Master Blaster | The Mad Max Wiki | Fandom), but with the player able to take control and “ride” multiple enemies.
In my limited experimentation, a blend space seems ideal for incorporating random variation in looping animations like Idle and Walk. For the Idle animations, I want to have some random variation in playback speed. Right now, I’m doing the following:
- Create Blend Spaces for each actor, using sequences that are “paired up” appropriately
- Create two actors and set them to play their associated Blend Spaces, with an exposed “Speed” float variable as input to the Blend Space playback speed
- Spawn the two actors in my custom GameMode blueprint
- Periodically (re)generate a random float in GameMode
- Using the actor references spawned in 3, set their Speed variable to the random float (which then gets passed to the Blend Space playback speed of each actor)
The problem is that if the pair Idles for long enough, the animations get desynced, probably because there’s some lag between with the first actor updates his speed and the second one updates its speed, which builds up over time.
I found this thread from 3 years ago regarding a horse + rider problem: Horse Mount: How to sync 2 blendspace animations; the rider and the horse? - Animation - Unreal Engine Forums
The solution there seems to be to create a “composite” skeleton that includes all the bones from both skeletons. But this would be a real pain to set up in Maya, as all of my humanoid characters have identical rigs (distinguished in scene using namespaces) and share morphs with the same names (e.g., eyes closed, smile, frown, etc.), and I think I’d need to rename all of those in order to export them as a single skeleton and have morphs driven correctly in UE4.
Is there some other, more elegant way to do this? Ideally some way to make sure that when Actor 1 starts a loop at frame 1, Actor 2 also starts at frame 1. I think AnimSequences and AnimMontages support this, but can it be done with BlendSpaces?