Blend times > 0 cause "Blend Poses by Int" node and State Machine transitions to fail

Hey folks -

I’ve tried my best to diligently search for answers and test a number of alternatives before posting here, but I can’t seem to wrap my head around this one. At least I’ve narrowed it down to the one specific thing that is giving me problems. In a nutshell, while running a fresh clean install of 4.10.1, I cannot seem to get my vehicle/character to blend properly between cached poses, simple anims or even between machine states in-game. Everything works fine in the Preview pane, but while playing the character stays stuck in the previous pose/anim/state if I use even tiny blend times (0.1). When set to 0.0, I can pop immediately to the correct pose, but this is not the behavior I want to happen.

Quick overview, I have a flying vehicle (so nothing complicated like running → walking → idle going on) that transforms shape based on the current active fire mode. When using lasers, I have those guns popped out and when I switch to, say, a gatling machine gun then I want that stuff to pack away and deploy the new weaponry. Way easier than any humanoid-based FPS for sure.

So here’s how I tried to set this up. Given I have a number of weapon configs, I didn’t want to create all possible animations switching from #3 to #1 and #2 to #5 etc. Instead I used some Transform Bone modifiers to directly modify my ship’s shape (rotate open a hatch, extend out a laser, etc) and cache that into a pose for a given weapon. My final pose comes out of a “Blend Poses by Int” node, to which I’ve added a new pin for every pose I have. The Event Graph is super simple - I ask my owning player “hey what weapon we got?” and pump that in my Active Child Index (per below). Preview works perfectly - in-game nothing happens. When debugging I found the value arrives here just fine however the node refuses to switch up based on its value. However - what I did find is that it works when the blend times are set to 0.0, but get stuck at any other value. So in this example below - I can immediately pop from any pose on here except for #4 where I have a blend time of 1.0. When 4 is fed in, the node stays on whatever previous child it was currently using (except for the preview instance). Odd right?

http://s15.postimg.org/tp5qdwo4r/Prob1.jpg

To rule out a problem with using cached poses and bone transforms, here’s another attempt using straight up animations. I made a couple of key frames for each final pose I want, and am trying to blend between them using the same technique. Exact same issue. So where above I’m showing the preview instance and the node is going to #4 just fine - this image below is set to the instance of my character in-game. Hovering over the child index value, you can see it says to go to #4. However, the white lines are still feeding #0 (which is the weapon I came from). I’ve promoted a float variable to set the blend times and this is set to 0.375 at the bottom there. When 0.0, I can pop - anything else - I cannot.

http://s15.postimg.org/y0uc2wv1n/Prob2.jpg

Figuring maybe the “Blend Poses by Int” node itself is somehow buggered in 4.10, I tried a completely different route using the State Machines themselves and discovered the exact same problem there! Here I’ve got a “State” for each weapon with only the pose anim going straight to a final pose inside each state. The connection rules are also pretty simple, just with a single test on the current weapon index allowing transitions from state to state. I would hate to go down this path simply because every time I add another weapon I’d have to create more transitions to and from every other one I already have. So here’s the weird thing in this setup… If I put any Duration greater than 0.0 in the Blend Settings on any of these transitions, they ALSO stop working. Once again I can pop from state to state if zero, but any linkage blending greater than 0 will prevent transition regardless if the “Can Transition” logic gives it the go-ahead. Anybody else seeing this, or am I a lucky guy?

http://s15.postimg.org/4keq0hoob/Prob3.jpg

Workaround:

Here’s how I finally cracked it, at least for now. Also a bit of a maintenance headache, but it does work. It’s really just recreating that original node the long way. I’ve got a series of standard Blend nodes lined up in a row, and am changing the Alphas uniquely for each pose I have. So setting those 4 floats to something like 1-1-0-0 I can get to the middle pose. That gets me to the right pose, but those nodes don’t support any sort of blending over time. (If they did, I’d imagine they’d also be broken LOL).

http://s15.postimg.org/5dvx6uk2z/Prob4.jpg

To support blending of these Alphas out in the Event Graph, now each Alpha also needs a duplicate variable which I set as a Target goal and I have to RInterpTo my way there over time… UGH

http://s15.postimg.org/6rnk25jcb/Prob5.jpg

For the record, this is a clean project with no other animations or anim graphs or anything in it that could be causing conflicts. (We’re just porting now over from UDK - we did similar pose type work there using SkelControls in an AnimTree). I’ve made sure nothing is calling back into my event graph repeatedly to get things hung up. The popping worked, as does the workaround, so the mesh is setup right with the Anim BP ref and they all communicate with the character and back. It just seems like the AnimGraph cannot work with timers behind the scenes… Some sort of Tick group issue, IDK. If you notice in pic #4, I also have a slot setup to play montages and even those do not play. Probably something for a separate question, I get it. But even something as stupid simple as a Keybind → Get Mesh → Get its Anim BP → Cast to My Anim BP → Play Montage (in a clean Pawn with nothing else) will return a value equal to the timed length of the montage but will not play the animation inside it. Notify events in that montage wont report back being triggered, so again its like time freezes in the Anim BP.

Sorry for the TL:DR novella here, but hopefully somebody can go “hey dummy, you forgot to check this box” somewhere obvious and presto it works correctly. I’m out of ideas otherwise. Thanks for any help!

Hi 1l2Hawk,

Thanks for reporting this. In this instance, it’s going to be a lot faster to determine if this is a bug if I were to get the project and take a look myself. If you’re OK with that, you can upload to any file sharing service and PM me a link on the forums. Please include a link to this Answerhub post in your message.

If it turns out not to be a bug, but just something with the setup, I’d still like to help out where possible as it seems you’ve been really good about documenting the issue, which will help a lot while digging through the project.

-.

Hrmm… OK, I migrated my character into a new project to package up for you and every one of these methods works just fine over there. But they still do not work in my main project. I guess this can be marked resolved then. Any advice on what to check when this kinda of mismatch happens across projects?

Were you upgrading your project from a previous version? Is it a code project or binary only? I can’t really imagine what could “corrupt” the project like this.

If you did upgrade the project, migrate the assets from the old engine project to a fresh project, then upgrade the fresh project to 4.10.1. If we can reproduce the “corruption” of the project, I can bug it and have an engineer take a look.

-.

It’s setup as a code project for future flexibility, however only the basic game mode is compiled - everything else we’re doing in BPs. Some small pieces were migrated from 4.9 with a lot started from fresh in 4.10.1. This character did migrate from 4.9 though. I’ll see if I can break it with the steps you outlined.

Here’s what else I’ve found btw… I also cannot Tick any functionality, nor can I set any Timers by Function on my Character and get a response there (even if I toss a Set Actor Tick Enabled set to true right after Event Begin Play as mentioned elsewhere). I’m sure this is why the AnimBPs are getting affected, so turns out I’m having the same issue as others here where the Character BPs are not responding to any sort of ticking/timing functions.

Edit: OK, making a new character in the existing project does give me back tick functions - so I guess the problem is isolated to migrated characters from previous engine revs. (?)

Apologies for the delay in response. When you say migrated, do you mean you used the “migrate” feature from a 4.9 project to a 4.10 project?

If this is what you’re doing, it could be worth opening the project browser with 4.10 and picking your 4.9 project. Then after it converts a copy of the 4.9 project to 4.10, you can migrate from there.

Yes - I used the migrate feature from the content browser to bounce existing 4.9 content into a brand new 4.10 project (or actually whenever there’s been new engine upgrades). This always felt like a safer route to go to try out new engine versions because it leaves my original content intact.

When I’ve tried to do it per your suggestion in the past, I get all these warnings that opening the project could prevent it from being opened again in the older version and I might get data loss etc. That sounds super scary when you don’t know if the game will work in the new version or not. Sounds like where a warning is needed is when migrating across engine versions instead. (Not that you could be sure if this was even happening - I get it).

Just now noticed the “Open a Copy” and “Convert In-Place” buttons under More Options… Had no idea that’s how we’re suppose to upgrade our projects. Thanks for the tip!

We had to hide away “Convert In-Place” and “Skip Conversion” because too many people kept doing that instead of “Open a copy”.

Anyways, could you try the “Open a Copy” option and let me know if that helps? Can you also try going to 4.11 Preview 1? I’d like to know if it’s been fixed as 4.11 has A LOT of fixes. To do this, you’ll need to convert from 4.9 to 4.10 to 4.11…skipping over versions can be problematic at times.

Will do. Also curious.

Just checking to see if my suggestion worked. If so, I’ll mark this as resolved.

Hi 1|2Hawk,

We have not heard back from you in a few days, so we are marking this post as Resolved for tracking purposes. If you are still experiencing the issue you reported, please respond to this message with additional information and we will offer further assistance.

-.