In the AnimNode_Slot code, It seems that update() and evaluate() should be called by following order because in TickAnimation step, we need to make MontageEvaluateData valid.
however when using AnimBudgetAllocator, tick can be skipped and
problem occurs when Evaluate() called without update().
licensee seems to have solved this problem through the code below.
AnimInstanceProxy.cpp --------------------- bool FAnimInstanceProxy::IsInvalidMontageEvaluationData() const { return MontageEvaluationData.ContainsByPredicate([](const FMontageEvaluationState& state){ return state.Montage.IsValid() == false; }); } AnimNode_Slot.cpp --------------------- FPoseContext SourceContext(Output); if (WeightData.SourceWeight > ZERO_ANIMWEIGHT_THRESH || Output.AnimInstanceProxy->IsInvalidMontageEvaluationData()) { Source.Evaluate(SourceContext); }
When using AnimBudgetAllocator, during the AnimNode Evaluating stage, Bone Transform becomes invalid, and it causes a crash at TransformVectorized.h 1240 line
it is reproduced in the following situation
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-132403 in the post.
0 |
Component | UE - Anim - Runtime |
---|---|
Affects Versions | 4.26.2 |
Target Fix | 5.2 |
Created | Oct 21, 2021 |
---|---|
Resolved | Sep 14, 2022 |
Updated | Nov 15, 2022 |