UEC++Part4--UObject、UgameInstance、actor组件、静态加载
一、补充
1、ExposeOnSpawn
UPROPERTY(EditAnwhere,BlueprintReadWrite,meta=(ExposeOnSpawn="ExposeOnSpawnValue")) int32 health;在生成这个对象时会有一个初始值可以设置,类似游戏创建角色时可以调整角色的捏脸数值
2、:public FTableRowBase
USTRUCT(BlueprintType) struct ALTestStruct :public FTableRowBase{}可以使结构体能够被数据表格使用,当然,数据表格所有数据要与结构体一一对应。
二、UObject实例化
1、创建一个父类为Object的c++类
2、在.h文件里
#include"MyObject.h" UPROPERTY() UMyObject* ALObject;3、.cpp
TSubClassOf<UMyObject> ALSubClass=UMyObject::StaticClass(); ALOject=NewUMyObject<UMyObject>(Getworld(),ALSubClass);只有在需要让属性可以在编辑器中选择某个类(而不是实例)时,才用 TSubclassOf
三、UGameInstance
1、创建一个父类为GameInstance的c++类
2、.h
#include"MyGameInstance" UPORPERTY() UMyGameInstance* ALGI;3、.cpp
ALGI=Cast<UMyGameInstance>(GetWorld()->GetFirstPlayerController()->GetGameInstance());四、Actor
1、 组件
#include"Component/SceneComponent.h" #include"Component/StaticmeshComponent.h" #include"Component/BoxComponent.h" #include"Particles/ParticleSystemComponent.h" #include"Components/AudioComponent.h"第一行是所有场景组件的头文件,第二行是静态网格体,第三行是box碰撞体积的,第四行是粒子特效,第五行是声音。
2、.h文件
UPROPERTY() USceneComponent* ALRoot; UPROPERTY() UStaticMeshComponent* ALMesh; UPROPERTY() UBoxComponent* ALBox; UPROPERTY() UParticleSystemComponent* ALParticle; UPROPERTY() UAudioComponent* ALAudio;声明组件
3、.cpp文件
ALRoot = CreateDefaultSubobject<USceneComponent>(TEXT("ALRoot")); ALMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("ALMesh")); ALAudio = CreateDefaultSubobject<UAudioComponent>(TEXT("ALAudio")); ALBox = CreateDefaultSubobject<UBoxComponent>(TEXT("ALBox")); ALParticle = CreateDefaultSubobject<UParticleSystemComponent>(TEXT("ALParticle")); RootComponent = ALRoot; ALMesh->SetupAttachment(ALRoot); ALAudio->SetupAttachment(ALRoot); ALBox->SetupAttachment(ALRoot); ALParticle->SetupAttachment(ALRoot);CreateDefaultSubobject<?>(TEXT("name"))用于创建组件
RootComponent=?来设定根组件
x->SetupAttachment(y)将x组件插入根组件y里
注:上述代码要在构造函数当中写入
五、静态加载
1、静态加载资源
在UE里资源无法直接调用,必须加载后才能被Object设置。
static ConstructorHelpers::FObjectFinder<?>名字(TEXT(“文件索引”))
static ConstructorHelpers::FObjectFinder<UStaticMesh>MeshValue(TEXT("/Engine/BasicShapes/Cube.Cube"));设置:
ALMesh->SetStaticMesh(MeshValue.Object);其他组件同理
2、静态加载类
static ConstructorHelpers::FClassFinder<?>名字(TEXT(“文件索引”))
static ConstructorHelpers::FClassFinder<UParticleSystem> ParticleValue(TEXT("/Game/StarterContent/Particles/P_Fire.P_Fire_C"));AMyActor = ActorValue.Class;类似静态加载资源
注:静态加载必须写在构造函数里。
六、动态加载
1、动态加载资源
UStaticMesh* ALMesh = LoadObject<UStaticMesh>(nullptr, TEXT("/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube")); ALMesh->SetStaticMesh(ValueMesh);加载资源时与静态不同,设置时是一样的。
2、动态加载类
UClass* ValueClass = LoadClass<AAL_Actor>(nullptr, TEXT("/Game/Blueprints/BP_AL_Actor.BP_AL_Actor_C")); AActor* ValueActor = GetWorld()->SpawnActor<AAL_Actor>(ValueClass, FTransform::Identity);注:动态加载可以不用写在构造函数内部
