Greetings!
I have the following code that asynchronously loads a skeletal mesh and then set it into a component:
// .h
TMap<USkeletalMeshComponent*, TSharedPtr<FStreamableHandle>> Handlers;
// .cpp
void ASeaDogsGameState::AsyncChangeSkeletalMesh(USkeletalMeshComponent* MeshComponent,
TSoftObjectPtr<USkeletalMesh> Mesh)
{
FStreamableManager& Manager = UAssetManager::GetStreamableManager();
FStreamableDelegate Delegate;
Delegate.BindLambda(
[this, MeshComponent]()
{
USkeletalMesh* LoadedMesh = Cast<USkeletalMesh>(Handlers[MeshComponent]->GetLoadedAsset());
if (IsValid(LoadedMesh))
{
MeshComponent->SetSkeletalMesh(LoadedMesh);
}
});
Handlers.Add(MeshComponent, Manager.RequestAsyncLoad(Mesh.ToSoftObjectPath(), Delegate));
}
However, at the MeshComponent->SetSkeletalMesh(LoadedMesh) step, lags occur as if the mesh was never loaded into memory. As a result, I have to keep all skeletal meshes in a character variable to dynamically switch meshes without lags.
Maybe someone has encountered this problem and knows how to solve it?