Today we are going to roll into the New Year by adding in root motion to our kick animations as well as convert them to stay in place rather than move the mesh on their own.
This will help clean up the crappy roundhouse kick animation we had in place at the end of our last tutorial.
Today we are finally back with the Player Character series , picking up where we left off, as well as incorporating all the previous tutorials into this lesson.
This time we are going to do a review lesson, where we go back over all the topics we covered earlier, and use them to implement a new set of attacks in the form of kicks.
An Anim Instance is the animation instance that drives our class.
Great ! So what is an Anim Instance ?
It’s really just a container and / or facade object that interacts with our class and any animations / montages that this class is currently executing.
What it allows us to do, is have fine grain control over the state and playback of our animations.
That’s great for you but what about my needs ?
Well since the
UAnimInstance
UAnimInstanceobject lets you take control of your animations it will be beneficial to a lot of game play mechanics.
Let’s just quickly glance over some of the parts of the Anim Instance to see how they could help by examining the PlayAnimMontage call.
As you guys can see, the guys at Epic have taken a bunch of pieces of the Anim Instance class and wrapped them in a helper method.
So what is this method doing ?
Well it brings in the AnimInstance from our Mesh object by calling GetAnimInstance().
Then it validates that the montage we want to interact with is available and the Anim Instance is not null.
If that passes it then kicks off the Montage_Play method right on the Anim Instance by passing in the montage and the Play Rate.
So far so good.
We then look at a few more conditionals that just ensure the data that is required is available to us.
And then lastly it calls Montage_JumpToSection as the overall method takes in a StartSectionName value that determines the playback position.
Even Epic likes Anim Instances ? How do I subscribe to their newsletter ?
Well you can do that through their web site or simply by getting a reference to your local neighborhood Anim Instance and start performing some of these operations.
What are these common operations ?
There are a bunch of them but let’s go over the immediately meaningful ones.
Montage_Stop
Montage_Stop– stops the montage and blends in the next animation using the blend speed parameter. Good for killing montages mid playback.
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// takes in a blend speed ( 1.0f ) as well as the montage
// takes in a blend speed ( 1.0f ) as well as the montage
AnimInstance->Montage_Stop(1.0f, AttackMontage->Montage);
// takes in a blend speed ( 1.0f ) as well as the montage
AnimInstance->Montage_Stop(1.0f, AttackMontage->Montage);
Montage_Pause
Montage_Pause– pauses the current animation and freezes parts of the object tied to those animations. In our case we are able to pause a punch mid stream. Great for effects where you need to halt an animation, do some other activities and then resume.
// takes in the montage you want to resume playback for
AnimInstance->Montage_Resume(AttackMontage->Montage);
// takes in the montage you want to resume playback for
AnimInstance->Montage_Resume(AttackMontage->Montage);
Montage_Play – triggers the playback of an animation based on various criteria like montage, speed, return type, playback start position and a control variable to stop other montages if they are currently executing.
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// kicks off the playback at a steady rate of 1 and starts playback at 0 frames
// kicks off the playback at a steady rate of 1 and starts playback at 0 frames
AnimInstance->Montage_Play(AttackMontage->Montage, 1.0f, EMontagePlayReturnType::Duration, 0.0f, true);
// kicks off the playback at a steady rate of 1 and starts playback at 0 frames
AnimInstance->Montage_Play(AttackMontage->Montage, 1.0f, EMontagePlayReturnType::Duration, 0.0f, true);
Montage_GetPosition
Montage_GetPosition– returns the current position of the playback frames as they are contained within the duration of the animation.