首页 > 学院 > 开发设计 > 正文

ue4-资源加载和实例化类

2019-11-06 09:58:06
字体:
来源:转载
供稿:网友

加载资源,然后实例化对象


资源加载,并实例化

构造中加载蓝图或c++类

加载并实例化一个蓝图类

static 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++类

CursorToWorld = CreateDefaultSubobject<UDecalComponent>("CursorToWorld"); //必须提供一个 name(CursorToWorld) CursorToWorld->SetupAttachment(RootComponent); //这是一个 USceneComponent 的子类,才能显示到编辑器的 Components窗口 中,因为 USceneComponent 组件带有 transform 信息,而 UActorComponent 没有。

加载一个蓝图类,并实例化成蓝图对象

static 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 派生的蓝图类

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyChar") TSubclassOf<AMyBullet> BulletClass;

实例化这个蓝图类

FActorSpawnParameters SpawnInfo; SpawnInfo.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; AMyBullet* mBullet = GWorld->SpawnActor<AMyBullet>(BulletClass, SpawnInfo); mBullet->SetPkMsg(pkMsg);

实例化c++类,直接用 xxx::StaticClass()实例化

FActorSpawnParameters SpawnInfo; SpawnInfo.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; AMyBullet* mBullet = GWorld->SpawnActor<AMyBullet>(AMyBullet::StaticClass(), SpawnInfo); mBullet->SetPkMsg(pkMsg);

同步加载

bool 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-异步加载资源


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表