TSoftObjectPtr和TSoftClassPtr
模板类帮助我们在进行资源操作时增加了类型安全检查,我们可以在细节面板中根据给定的模版类型拾取对应的资源,以获得更加高效的操作!
同样的,TSoftObjectPtr和TSoftClassPtr也分为同步加载与异步加载!针对资源拾取类别不同,使用需要注意!
1 2 3 4
| UPROPERTY(EditAnywhere) TSoftObjectPtr<class UStaticMesh> SoftMesh; UPROPERTY(EditAnywhere) TSoftClassPtr<class ATestActor> SoftTestActor;
|
TSoftObjectPtr:
同步加载
头文件:
1 2 3 4 5
| UPROPERTY(EditAnywhere) TSoftObjectPtr<class UStaticMesh> SoftMesh;
FStreamableManager m_Streamable;
|
cpp文件:
1 2 3 4 5 6 7 8
| SoftMesh.ToSoftObjectPath();
UObject* Source = m_Streamable.LoadSynchronous(SoftMesh); UStaticMesh* Mesh = Cast<UStaticMesh>(Source); if (Mesh) { UKismetSystemLibrary::PrintString(this, TEXT("加载成功!")); }
|
异步加载
头文件:添加一个回调函数
1 2
| void LoadSourceCallback();
|
cpp文件:需要在初始化函数中绑定回调函数,然后实现回调函数
1 2
| m_Streamable.RequestAsyncLoad(SoftMesh.ToSoftObjectPath(), FStreamableDelegate::CreateUObject(this, &UTestGameInstance::LoadSourceCallback));
|
回调函数实现:
1 2 3 4 5 6
| void UTestGameInstance::LoadSourceCallback() { if (SoftMesh.Get()) { UKismetSystemLibrary::PrintString(this, TEXT("加载成功!")); } }
|
TSoftClassPtr
同步加载
头文件:
1 2 3 4 5
| UPROPERTY(EditAnywhere) TSoftClassPtr<class ATestActor> SoftTestActor;
FStreamableManager m_Streamable;
|
cpp文件
1 2 3 4 5
| TSubclassOf<ATestActor> TestActorClass = m_Streamable.LoadSynchronous(SoftTestActor); if (TestActorClass) { GetWorld()->SpawnActor<ATestActor>(TestActorClass); }
|
异步加载
头文件:同TSoftClassPtr需要添加回调函数
cpp文件
1 2
| m_Streamable.RequestAsyncLoad(SoftTestActor.ToSoftObjectPath(), FStreamableDelegate::CreateUObject(this, &UTestGameInstance::LoadSourceCallback));
|
回调函数实现
1 2 3 4 5 6 7
| void UTestGameInstance::LoadSourceCallback() { UClass* TestActorClass = SoftTestActor.Get(); if (TestActorClass) { GetWorld()->SpawnActor<ATestActor>(TestActorClass); } }
|