I just find out that USpineSkeletonAnimationComponent
and USpineSkeletonRendererComponent
both ticks in same tick group (default TG_DuringPhysics
tick group). This means that it is basically random what component will update first during frame (I believe the order will not change during actors lifetime though).
I found out it when I started to see 1 blank frame when I start animation that should replace character and hide this character on AnimationStart event. Turns out this is because rendered updated before sceleton component so my character was not visible already but spine rendered did not processed new sceleton data because it was not ready for this frame yet.
Simple SetTickGroup(TG_EndPhysics);
in USpineSkeletonRendererComponent
constructor fixed this issue and now spine renderer always updates after skeleton data.
Hope it will help somone. Also if this behaviour with update in same tick group was intended and I am missing something - please share why it is done like this.