ue4-资源加载和实例化类
加载资源,然后实例化对象
资源加载,并实例化
构造中加载蓝图或c++类
- 加载并实例化一个蓝图类
1
2
3
4
5static ConstructorHelpers::FObjectFinder<UMaterial> DecalMaterialAsset(TEXT("Material'/Game/TopDownCPP/Blueprints/M_Cursor_Decal.M_Cursor_Decal'")); // 这个路径是在编辑器中右键该资源 Copy Reference,Material是 name
if (DecalMaterialAsset.Succeeded())
{
CursorToWorld->SetDecalMaterial(DecalMaterialAsset.Object);
} - 实例化一个c++类
1
2CursorToWorld = CreateDefaultSubobject<UDecalComponent>("CursorToWorld"); //必须提供一个 name(CursorToWorld)
CursorToWorld->SetupAttachment(RootComponent); //这是一个 USceneComponent 的子类,才能显示到编辑器的 Components窗口 中,因为 USceneComponent 组件带有 transform 信息,而 UActorComponent 没有。 - 加载一个蓝图类,并实例化成蓝图对象
1
2
3
4
5
6
7static ConstructorHelpers::FClassFinder<UCoolDownComp> CDComplAsset(TEXT("/Game/TopDownCPP/MyBp/CDCompBp")); // 这个就不能右键该资源 Copy Reference,只能是不带name的一个路径
if (CDComplAsset.Succeeded())
{
UE_LOG(LogMyTest, Warning, TEXT("--- CDComplAsset.Succeeded()"));
mCDComp = NewObject<UCoolDownComp>(this, CDComplAsset.Class, "UCoolDownComp"); //必须提供一个 name(UCoolDownComp)
mCDComp->SetupAttachment(RootComponent);
}
- 加载并实例化一个蓝图类
不在构造中实例化蓝图c++类
实例化蓝图类
- 起个成员,可以让编辑器中指定 AMyBullet 派生的蓝图类
1
2UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyChar")
TSubclassOf<AMyBullet> BulletClass; - 实例化这个蓝图类
1
2
3
4FActorSpawnParameters SpawnInfo;
SpawnInfo.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
AMyBullet* mBullet = GWorld->SpawnActor<AMyBullet>(BulletClass, SpawnInfo);
mBullet->SetPkMsg(pkMsg);
- 起个成员,可以让编辑器中指定 AMyBullet 派生的蓝图类
实例化c++类,直接用 xxx::StaticClass()实例化
1
2
3
4FActorSpawnParameters SpawnInfo;
SpawnInfo.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
AMyBullet* mBullet = GWorld->SpawnActor<AMyBullet>(AMyBullet::StaticClass(), SpawnInfo);
mBullet->SetPkMsg(pkMsg);
同步加载
1
2
3
4
5
6
7
8
9
10
11
12
13bool UMyBpFuncLib::TestChangeCharAnimInstance(AMyChar* _myChar, FString _pathMesh, FString _pathAnim)
{
FStreamableManager* stream = new FStreamableManager();
FStringAssetReference ref1(*_pathMesh);
USkeletalMesh* TmpMesh = Cast<USkeletalMesh>(stream->SynchronousLoad(ref1));
_myChar->GetMesh()->SetSkeletalMesh(TmpMesh);
FStringAssetReference ref2(*_pathAnim);
UAnimBlueprint* TmpMeshAnim = Cast<UAnimBlueprint>(stream->SynchronousLoad(ref2));
_myChar->GetMesh()->SetAnimInstanceClass((UClass*)TmpMeshAnim->GetAnimBlueprintGeneratedClass());
delete stream;
return true;
}异步加载参照这篇:ue4-异步加载资源