TSoftObjectPtr和TSoftClassPtr
模板类帮助我们在进行资源操作时增加了类型安全检查,我们可以在细节面板中根据给定的模版类型拾取对应的资源,以获得更加高效的操作!
同样的,TSoftObjectPtr和TSoftClassPtr也分为同步加载与异步加载!针对资源拾取类别不同,使用需要注意!
UPROPERTY(EditAnywhere) TSoftObjectPtr<class UStaticMesh> SoftMesh; UPROPERTY(EditAnywhere) TSoftClassPtr<class ATestActor> SoftTestActor;
TSoftClassPtr:
同步加载头文件:
UPROPERTY(EditAnywhere) TSoftObjectPtr<class UStaticMesh> SoftMesh; // 构建为栈对象,需要引入头文件,不要构建为堆对象 // #include "Engine/StreamableManager.h" FStreamableManager m_Streamable;
cpp文件:
// 可以转换为FSoftObjectPath对象 SoftMesh.ToSoftObjectPath(); // 同步加载 UObject* Source = m_Streamable.LoadSynchronous(SoftMesh); UStaticMesh* Mesh = Cast<UStaticMesh>(Source); if (Mesh) { UKismetSystemLibrary::PrintString(this, TEXT("加载成功!")); }
异步加载
头文件:添加一个回调函数
// 异步加载回调函数 void LoadSourceCallback();
cpp文件:需要在初始化函数中绑定回调函数,然后实现回调函数
// 异步加载 m_Streamable.RequestAsyncLoad(SoftMesh.ToSoftObjectPath(), FStreamableDelegate::CreateUObject(this, &UTestGameInstance::LoadSourceCallback));
回调函数实现:
void UTestGameInstance::LoadSourceCallback() { // 此函数调用,则表明异步加载完成 if (SoftMesh.Get()) { UKismetSystemLibrary::PrintString(this, TEXT("加载成功!")); } }
TSoftClassPtr
同步加载
头文件:
UPROPERTY(EditAnywhere) TSoftClassPtr<class ATestActor> SoftTestActor; // 构建为栈对象,需要引入头文件,不要构建为堆对象 // #include "Engine/StreamableManager.h" FStreamableManager m_Streamable;
cpp文件
// 同步加载 TSubclassOf<ATestActor> TestActorClass = m_Streamable.LoadSynchronous(SoftTestActor); if (TestActorClass) { GetWorld()->SpawnActor<ATestActor>(TestActorClass); }
异步加载
头文件:同TSoftClassPtr需要添加回调函数
cpp文件
// 异步加载 m_Streamable.RequestAsyncLoad(SoftTestActor.ToSoftObjectPath(), FStreamableDelegate::CreateUObject(this, &UTestGameInstance::LoadSourceCallback));
回调函数实现
void UTestGameInstance::LoadSourceCallback() { // 此函数调用,则表明异步加载完成 UClass* TestActorClass = SoftTestActor.Get(); if (TestActorClass) { GetWorld()->SpawnActor<ATestActor>(TestActorClass); } }
标签:异步,头文件,SoftMesh,拾取,TestActorClass,C++,TSoftClassPtr,UE,加载 From: https://www.cnblogs.com/limu-zy/p/16715858.html