Quick answer: Move game-thread reads into NativeUpdateAnimation (C++) or BlueprintUpdateAnimation (BP). Cache values into AnimInstance member variables; AnimGraph reads those.
Property Access pulling Character->GetVelocity() in a state machine condition fires a threading warning when parallel animation is on.
The Fix
// AnimInstance C++
UCLASS()
class UMyAnimInstance : public UAnimInstance {
GENERATED_BODY()
UPROPERTY(BlueprintReadOnly)
float Speed;
UPROPERTY(BlueprintReadOnly)
bool bIsFalling;
virtual void NativeUpdateAnimation(float Dt) override {
Super::NativeUpdateAnimation(Dt);
auto* C = Cast<ACharacter>(TryGetPawnOwner());
if (!C) return;
Speed = C->GetVelocity().Size2D();
bIsFalling = C->GetCharacterMovement()->IsFalling();
}
};
// AnimGraph reads Speed / bIsFalling: thread-safe member access.
NativeUpdateAnimation runs on game thread. Members are POD. AnimGraph thread reads them safely, no warnings.
Verifying
Threading warning gone. Animation transitions still react to character state.
“Cache on game thread. Read on worker. Quiet.”
Related Issues
For Anim BP cached pose, see cached pose. For state alias, see state alias.
Cache. Read. No race.