I gather that, yes, but I suppose that also means that unless you do change anything at runtime the MaterialInstances never change on their own? In that case it should be possible to edit their properties without much worry that they will be re-instanced at random moments. Was mostly just wondering why it was done there, and not in BeginPlay, but fair enough. Our normal workflow has been to create Instances in BeginPlay from whatever material is assigned to the object, assign the instances to the object and then that material instance is the one that lives for the duration of the object itself with whatever FX settings you change on it. From what you say USpineSkeletonRendererComponent works the same but does its updates on the fly in TickComponent and provided we don't change the material it will not discard the current instances.
I only started digging for this because USpineSkeletonRendererComponent->GetMaterials() is empty in BeginPlay in C++ but worked in BP (which is executed later).
Thank you for the info RE the animations, it's a bit different from Paper yes. I did find the delegates already so working with them. I just needed a way to keep track of which animation is playing and if it's not the right one update it, that was what the whole Tick check was about. In this case it would be to check if i.e. idle has changed to run and if not, add that track which means next frame you can check if it's already added on and don't bother with it.
How do I work around the linker errors produced by accessing anything that is in the spine-cpp section of the UE4 spine plugin? I.e. I can do GetAnimationState() fine, but trying to append getCurrent(0) there gives me an unresolved external for getCurrent. Same for anything else that returns a spine::class.
I.e:
spine::AnimationState* state = GetAnimator()->GetAnimationState();
state->getCurrent(0);
The first line compiles OK, but the second gives an unresolved external. GetAnimator is just an inline that returns the USpineSkeletonAnimationComponent pointer.
I have deleted the .vs, Binaries, Intermediate and Saved folders, and regenerated the solution file on both my desktop and laptop just to be sure but both get the same issue. It's almost as if they are not being built in despite having the SPINE_UE4 tag.
Tried in your test project as well by trying to getCurrent, for example, on the ASpineboyCppPawn with the same result.
Aaaah It's me being stupid and invoking the wrong methods, yay 😛 Food first, programming later after reading properly. And reading the wrong tutorials originally.