Pie crash FAnimInstanceProxy::SlotEvaluatePose check((AdditivePoses.Num() > 0) || (NonAdditivePoses.Num() > 0));

Hello,

We have been running into some issues in 4.13 where the game crashes when streaming in a specific sublevel.

Callstack Link

The culprit is that actors that exists in a level that was used before are reused once the level is streamed in again however we do not Tick the anim instance because it was created before. This causes the evaluate call at RefreshBoneTransforms() to contain previous evaluated data which might not be valid, (MontageEvaluationData etc.).

We fixed this by simply doing a TickAnimation(0.f, false); call if InitializeAnimScriptInstance() return false in USkeletalMeshComponent::InitAnim but i’m not sure if this is the proper fix.

Have you guys seen this issue on your end? Any idea what a better fix would be?

Kind regards

Joakim,

I would expect that when you stream out your sublevel the actors should be destroyed, then recreated once the level is streamed in again. This should cause any stale data used by the animation to be cleared, as most of the checks done in InitializeAnimScriptInstance rely on Transient properties.

Here are a couple of things that you should try to check:

  1. Put a breakpoint in InitializeAnimScriptInstance and see why it’s returning false.
  2. Verify the Actors causing the issue are properly being destroyed when the level is streamed out.
  3. Verify the Actors causing the issue are properly being recreated when the level is streamed in.

Something could be holding on to a hard reference to these actors (like a UPROPERTY) instead of a soft reference (like a TWeakObjecPtr) preventing them from being completely destroyed.

Thanks,
Jon N.