Wah, neither I don't have clear idea about the exact reason of this bug.
but I fixed it by simply not creating any collision when the world is not the gameworld (only generate collision when it is running on PIE, Packaged game).
in USpineSkeletonRendererComponent::Flush() :
void USpineSkeletonRendererComponent::Flush (int &Idx, TArray<FVector> &Vertices, TArray<int32> &Indices, TArray<FVector> &Normals, TArray<FVector2D> &Uvs, TArray<FColor> &Colors, TArray<FVector>& Colors2, UMaterialInstanceDynamic* Material) {
if (Vertices.Num() == 0) return;
SetMaterial(Idx, Material);
bool bShouldCreateCollision = false;
if (bCreateCollision) {
UWorld* World = GetWorld();
if (World) {
if (World->IsGameWorld()) {
bShouldCreateCollision = true;
}
}
}
CreateMeshSection(Idx, Vertices, Indices, Normals, Uvs, Colors, TArray<FProcMeshTangent>(), bShouldCreateCollision);
Vertices.SetNum(0);
Indices.SetNum(0);
Normals.SetNum(0);
Uvs.SetNum(0);
Colors.SetNum(0);
Colors2.SetNum(0);
Idx++;
}