Tutorial: Your First 60 Minutes With Motion Matching

You have to adapt the structure of this tutorial to those community tutorials:

Thanks, Jinkel. I will check these out.

Am i the only one having the problem where when i create and connect the “MotionMatchingOnUpdate” function, the idle animation always plays at 5x speed?

If i remove the function, it plays idle at normal speed again.

So, I was able to use this and also got jumping, crouching, and sprinting added. I was able to get hovering working with using a second animation blueprint using traditional blendspaces and now it switches perfectly between the 2. I could never get hovering to work using a chooser table and motion matching though.

Hi @euan_carmichael
How are these values calculated?

  • Max Acceleration = 800.0
  • Max Walk Speed = 600.0
  • Min Analog Walk Speed = 300.0

Embark on your journey with Motion Matching through this comprehensive tutorial, designed to guide you through the first 60 minutes of mastering this innovative animation technique.

You could use a single database containing all of your clips if that’s the approach that you really wanted to go for. However, you’ll very likely run into more issues with pose selection if you go down that route, so, at the least, you would need a more complex schema with that approach. We recommend using multiple databases because it simplifies the dataset that the system is matching against to animations that are contextually relevant for whatever state the character is in (ie. locomotion vs idle).

We cover motion matched jumps in the sample project that will be released soon so I’d recommend checking that out.
For Start From Matching Pose, you can use that to try and match the pose when you transition into a state containing regular animation rather than a motion matching node. There are a few extra steps to get it working vs just using motion matching.

  1. In your anim sequence, add a PoseSearchBranchIn state notify into your animation for the frames that you want to be able to enter the clip within (these are the frames that will be searched)
  2. Set your PoseSearchDatabase within the notify
  3. In your anim bp, add your anim sequence into the destination state that you’re going to transition into and set that Start From Matching Pose property
  4. There must be a Pose History node downstream of the state you’re transitioning into

Max Acceleration was just what felt good to me with these animations. Max Walk speed is the speed of the jog animations and Min Analog Walk Speed is the speed of the walk animations.

1 Like

Thank you. It helps us a lot. :raised_hands:

Hello Euan, how can we make custom channels that can read pre-prepared data? For example, if I save some sort of embedding data into animation curves within an animation sequence, how do I make a custom channel to use these? I tried a workaround using the position channel blueprint clas and overriding the “get world position” to read the curves instead. It kinda worked but it seems the PCAKDtree and brute-force methods cant pre-process this data correctly. Basically, I want to know how I can make a channel to use pre-prepared features that have nothing to do with bones, velocity or position. Thank you.

I feel so frustrated following this tutorial. I wonder if there is someone on YouTube or in the community who can create a good step-by-step tutorial.

Hi. Great course so far. I ran into an issue section 3.
In the event graph at 3.d the Clamp Input Scale node was missing the input scale pin. My function graph looked exactly as it does in the image at 3.c but the clamp input scale function node was also missing that pin.
The reason the pin was missing is mentioned at 3.a, but I didn’t understand it at first so missed this step - ‘…a. The function should take a Vector2D variable as an input. Name this InputScale’.
This means - Click on Clamp Input Scale node in the function graph, go to the details panel and add Input Scale as a variable under Inputs. Now the pin will appear. I had added my Input Scale under variables. That’s where I went wrong. Hope this helps any other newbies like me

Thank you!