1.创建Actor对象
创建Actor对象,需要使用UWorld::SpawnActor()接口,此函数不能放在构造函数,如下所示:
AMyActor* MyActor = GetWorld()->SpawnActor<AMyActor>(FVector(150, 0, 20), FRotator::ZeroRotator);
2.创建组件
在UE4中,为Actor创建组件,可以使用UObject::CreateDefaultSubobject()模板函数,这个函数只能在构造函数中调用,注意:所填参数名称不能重复。如下所示:
UMyActorComponent* MyComponent = CreateDefaultSubobject<UMyActorComponent>(TEXT("MyComponent"));
3.加载资源对象
在UE4中,项目中的所有资源文件,不要看做是文件,而要理解为“静态对象”:也就是对象序列化的产物。加载项目资源可以使用“UObject::StaticLoadObject()”函数,其中重要的参数为对象的Name,而不是文件路径。UE底层提供文件读取功能,无论资源文件是存储我独立的.uasset文件,还是存储到.PAK文件中,对于上层都不需要关心。
UMaterialInterface* pMaterialInterface = LoadObject<UMaterialInterface>(nullptr, TEXT("Material'/TestMaterial/TestMaterial.TestMaterial'")); Test_Mat = UMaterialInstanceDynamic::Create(pMaterialInterface, nullptr);
4. 创建UObject对象
如果你有UObject的派生类(非Actor、非ActorComponent),那你可以使用NewObject()模板函数来创建其实例对象。
MyObject = NewObject<UMyObject>();
5. 加载现有的蓝图类
ConstructorHelpers::FClassFinder,ConstructorHelpers::FObjectFinder加载蓝图,此方法得放在构造函数中加载,蓝图资源路径需要copy Reference后加_C,FClassFinder<T>,T为父类名
//示例1 加载窗口蓝图
static ConstructorHelpers::FClassFinder<UUserWidget> BP_Breastplate_Widget(TEXT("WidgetBlueprint'/Game/BP_Breastplate_Widget.BP_Breastplate_Widget'"));
WidgetCom->SetWidgetClass(BP_Breastplate_Widget.Class);
//示例2 加载普通蓝图
static ConstructorHelpers::FClassFinder<AActor> BP_MyActor(TEXT("Blueprint'/Game/BP_MyActor.BP_MyActor_C'"));
if (BP_MyActor.Succeeded())
{
BPMyActorClass = BP_MyActor.Class;
}
//示例3 加载普通蓝图
static ConstructorHelpers::FObjectFinder<UClass> bpClassFinder(TEXT("Blueprint'/Game/BP_MyActor.BP_MyActor_C'"));
if (bpClassFinder.Object)
{
UClass* bpClass = bpClassFinder.Object;
}