[UE4]创建对象的的几种姿势(C++)


DEMO源代码

没有,需自己实践


创建组件

在UE4中,为Actor创建组件,可使用UObject::CreateDefaultSubobject()模板函数,以下所示:

/* <CreateObjectDemo> * 创建Component对象,要使用CreateDefaultSubobject模板函数 */
MyComponent = CreateDefaultSubobject<UMyActorComponent>(TEXT("MyComponent"));

加载资源对象

在UE4中,项目中的所有资源文件,不要看作是文件,而要理解为“静态对象”:也就是对象序列化的产物。加载项目资源可使用“UObject::StaticLoadObject()”函数,其中重要的参数为对象的Name,而不是文件路径。UE底层提供文件读取功能,不管资源文件是存储我独立的.uasset文件,还是存储到.PAK文件中,对上层都不需要关心。

/* <CreateObjectDemo> * 加载模型、贴图等对象,使用StaticLoadObject函数 */ 
UStaticMesh* SM_Vase = Cast<UStaticMesh>(StaticLoadObject(UStaticMesh::StaticClass(), NULL, TEXT("/Game/Assets/StaticMeshes/SM_Vase")) ); 
StaticMeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMeshComponent")); 
StaticMeshComponent->SetStaticMesh(SM_Vase);

创建Actor对象

创建Actor对象,需要使用UWorld::SpawnActor()接口,以下所示:

/* <CreateObjectDemo> * 创建AActor派生类对象不要用NewObject或new,而要用UWorld::SpawnActor() */ 
UWorld* World = GetWorld(); FVector pos(150, 0, 20); 
AMyActor* MyActor = World->SpawnActor<AMyActor>(pos, FRotator::ZeroRotator);

创建UObject对象

如果你有UObject的派生类(非Actor、非ActorComponent),那你可使用NewObject()模板函数来创建其实例对象。

/* <CreateObjectDemo> * 使用NewObject模板函数,来创建UObject派生类对象 */ 
MyObject = NewObject<UMyObject>();

注意事项

1.CreateDefaultSubobject必须写在Actor的无参构造函数 中,否则crash;
2.CreateDefaultSubobject中的TEXT或者FName参数在同一个Actor中不能重复,否则crash;
3.UE4不推荐try catch,并且默认是不支持的,UE4推荐Assertions。
https://answers.unrealengine.com/questions/264921/cannot-use-try-with-exceptions-disabled.html
https://docs.unrealengine.com/latest/INT/Programming/Assertions/index.html


文章转载出处

猜你喜欢

转载自blog.csdn.net/ZFSR05255134/article/details/123051090