Missing Blueprint Animation features

Hello,

First off thanks for a great engine. UE4 is getting better with every update!

However, I feel like certain (for me at least) key animation features that I’m used to working with both in UDK as well as professionally in the past are missing.

Namely the “SetPosition” function from “AnimNodeSequence” in UDK:
http://wiki.beyondunreal.com/UE3:AnimNodeSequence_(UDK)#SetPosition

As it says there: Force the animation to a particular time.

When I was working with UDK I found this function invaluable for stretching out animations to match player input, for example for manually opening a door by holding the left stick forward, and stopping when you let go, or start closing it if you push the stick back. Or for stretching out an animation across the arc of a jump that may be of different lengths or heights.

Looking at the code there seems to be something like this called “Montage_SetPosition” inside the AnimInstance, but it doesn’t appear to be exposed in Blueprint anywhere.

As well as in the AnimSingleNodeInstance class, however I can’t figure out how to actually set this class up to function at all since nothing can be cast to it and I can’t create or spawn any asset that matches the input for this class, and reading in the code for it it appears to only be used for animation preview in the editor.

I’m using “Play Slot Animation” nodes quite a lot because it serves the purpose I need it for, and it would be great if there could be a “Set Slot Animation Position” that functions just like the “SetPosition” from UDK’s AnimNodeSequence.

I’ve yet to find a way to work around this and get the same result that I could get easily in UDK, so hopefully this kind of thing is something you’ve got lined up for a future update? If not, please do consider it since I can’t see how to do certain things with animation without it.

Thanks for a great engine,
Ivos

Another thing I’ve been thinking about:

Is there any reason why we can’t trigger Animation State transitions by just using events rather than having a ton of booleans we have to turn on and off? It feels incredibly clunky having to create another Boolean for every transition I want to add, or am I missing something here? Just setting a custom event to call the transition feels like it would be a lot more convenient.
I can see why you’d need a Boolean for some conditions, but it would be nice to have both options.

Lina Harper and Mathew Russell gives a lot of information and you get a decent overview of how/what they are doing for animations in Fortnite to give you idea how your design should be. Watch through end, tons of info. Unreal Engine 4 Twitch Broadcast – Animation and Mixamo Starter Pack Release Live from Epic HQ

Edit: i’m finally almost done with Inside Unreal Episodes. Just started the following:

Unreal Engine 4 Twitch Broadcast - Animation Tips & Tricks and Game Jam Results - Live from Epic HQ
and following seems like it should help give you idea whats available in UE4
Unreal Engine 4 Support Twitch Broadcast: Animation

I don’t really agree that the way they do it for Fortnite is “how my design should be” when I’m trying to make something completely different.

But, are you referring to my first or second post with these videos?
If it’s about the states, as I said I understand from those videos why it’s done that way, but couldn’t there also just be a “goToState” thing like we had in UDK? Instead of setting bools to TRUE or FALSE if all I want to do is tell it to play an animation and then go into a new idle until I tell it to exit that again, wouldn’t a simple function call be more appropriate than creating a new boolean for each situation and calling this boolean to be set to TRUE in code/blueprint?

And while the setup is nice for the type of animation system used for games like Fortnite, it isn’t applicable to every type of game so I don’t really think eliminating simpler ways of doing it like we could in UDK is a good approach for creativity, if that is the case.

I’m happy with the fact that I can just play animations on slots as is, but I would like more control over it just like we had in UDK. Setting position of the animation along its timeline being at the top of my list right now.

Also, any clue what this is?
e5acdcc98ed885b659f38b0ae9e4bc2009901f15.jpeg

I can’t seem to find anything like this. If that float value is the time from which they fetch a pose from an animation this might be similar to what I’m looking for in my first post.

your words confuse me…

You can Animate with the help of a State Machine to drive a Montage via the Event and Animation graphs. All are UE4 documents. Quick tutorial from Epic showing how to setup animations via Blueprints for human with idle, walking, running, jumping and punching animations.

How do you use Slots and not Notifys?

You’re misunderstanding what I’m looking to do.

I have no problem just playing animations.
I want more control than just hitting play, or jumping to a section in a montage. And notifies play no part in what I need to do.

I want to be able to tell the animation to go to 0.3 seconds or 0.67 seconds and stay on that frame if I so require it to.
This was possible, and very easy to do, in UDK. I’m not sure why it was taken out in UE4.

Looking at the very first tutorial video you linked now, the problem I want to fix is very visible during the jump of that character.
It is playing and looping the same animation over and over until the character lands.

What I’m looking to get control over is to tell it to start the “in air” animation from 0.0 seconds when the jump starts.
When the jump hits the top of the arc, the animation time should have lerped to 50% of it’s total length.
Right before the character lands again, the animation time should have lerped to 100% of it’s total length.

This would allow me to create a nice and non-looping jump animation.
I can’t just hit “play” on an animation and have it match all different jump heights perfectly. But if I could control the playback manually through Blueprint/code, it would be possible to make the animation length match the length and height of the jump.

However, without being able to tell the animation to jump to a specific place on its timeline, this is impossible.

The other problem is that telling the unit to go from one state to another requires me to create and set up a new boolean for each different transition I want to make. Rather than just telling it to “go to next state” by using a simple function.

I’m aware that with a montage it’s possible to jump to different sections but this isn’t really what I’m looking for.

Overall, this isn’t something that’s stopping me from creating THIS part of my animation setup, it just feels incredibly clunky to work with for something that could be simpler.

I hope this clarified what I mean. None of the videos so far have shown anything similar to what I want to do with the “SetPosition” function that was available in UDK, but not (yet) in UE4.

hmm

Yes, Animation Sequences Rate Scale property is EditAnywhere only.

AnimSequenceBase.h
/** Number for tweaking playback rate of this animation globally. */
UPROPERTY(EditAnywhere, Category=Animation)
float RateScale;

So you could instead put the Animation Sequence by itself in a Montage, and set the rate accordingly when calling Montage Play so you can continue your work for now. IE .5 for 50% speed. As a sort of work around.
Montage Play.png

edit: but i see what you’re saying :slight_smile:

Rate is an entirely different value than what I’m looking to use though. It doesn’t work as a work-around since the animation still plays on its own. I can’t use rate to tell the animation “You need to be at 0.45 seconds RIGHT NOW”.

+1, yes I agree.

Rate is an entirely different value than what I’m looking to use though. It doesn’t work as a work-around since the animation still plays on its own. I can’t use rate to tell the animation “You need to be at 0.45 seconds RIGHT NOW”.
[/QUOTE]

Montage Jump to Section and Montage Stop nodes with creative use of sections. Sorry, i thought i had this in above post. With that you should be able to prototype to UE3 method for now. Hope that helps you continue for now.

I left any C++ path out because from what i read in the headers i think its better you just straight up ask on AnswerHub or Animation subforum about working directly with animation sequences.

Hello,

>>Namely the “SetPosition” function from “AnimNodeSequence” in UDK:
>>http://wiki.beyondunreal.com/UE3:Ani...29#SetPosition

>>As it says there: Force the animation to a particular time.

There is a big reason why that feature has been removed. We had a very tight relationship between game objects such as Pawn or AI and animation object - Anim Tree, and that caused lots of issue such as memory due to destroying/spawning nodes, and that you couldn’t preview without those objects.

One of big effort in UE4 for animation system went into separating them out. That’s why montage was introduced, so that you still have control over it, but not regular nodes. Those nodes runs by itself with parameter of anim blueprint, but without any information from outside.

This design decision was to decouple game and engine, to save memory by not spawning nodes, and to optimize the run-time code.

Play Slot node is the right way to do and the way that works is that it create montage from that slot node, so essentially it is montage system.

Hope this helps for you to understand our system.

Thanks,

–Lina,

Additionally:

That is an evaluate node, it returns the pose for the supplied “Explicit Time”. As far as I am aware they can not be made directly (which is probably why you couldn’t find it). You make one by right clicking on a sequence node in the anim graph and selecting the “Convert to single frame animation” option from the context menu.

Hope that helps, good luck with your project! :slight_smile:

Martin

I’m well aware that this thread is really old, but I was having a really big issue with this as well. I ended up making an AnimNode override for AnimNode_SequencePlayer. It’s no more expensive than altering the framerate of an animation from the anim blueprint.
It just adds an extra pin, that allows the current time to be specified on the input, in the same way that you can control framerate. I was going to just modify AnimNode_SequencePlayer in my custom build of the engine, but the project I needed this for I plan on giving away, and it should work on unmodified engine too.

It essentially just does this:


void FAnimNode_SequencePlayAtTime::Evaluate(FPoseContext& Output)
{
	//If UseTime is negative,it is functionally identical to AnimNode_SequencePlayer
	if (UseTime >= 0)
	{
		InternalTimeAccumulator = FMath::Clamp(UseTime , 0.f, Sequence->SequenceLength);
	}
	Super::Evaluate(Output);
}

if UseTime is negative, it’s no different from AnimNode_SequencePlayer, where InternalTimeAccumulator just increases constantly.
I needed this precise control so I could drive an animation based on a linear value (Moving an Object in VR)
Works well, but My modeling skills Suck :wink: