UObject实例化
创建UObject实例
方法一:
//实例化UObject
MyTestObject = NewObject<UMObject>();
方法二:
//方法二
TSubclassOf<UMObject> MySubClassObject = UMObject::StaticClass();
MyTestObject = NewObject<UMObject>(GetWorld(), MySubClassObject);
上面的这个TSubClassOf方法:
UClass的安全模板类,通过此模板类我们可以快速在编辑器中进行类型选择,帮助我们快速构建某种类型对象数据。
//返回一个UClass类型
MySubClassObject.Get();
UObject销毁
1. 自动销毁(UE自动垃圾回收机制)
2. UObjcet::ConditionalBeginDestory(异步执行,且对象在当前帧内有效)
Obj->ConditionBeginDestory();
Obj = nullptr;
GameInstance实例化
首先在项目设置里设置游戏实例类
然后在代码里动态获取
//创建MyInstance
MyInstance = Cast<UMyGameInstance>(GetWorld()->GetFirstPlayerController()->GetGameInstance());
创建Actor并添加组件
1. 头文件中声明各种组件
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MySceneComponent")
class USceneComponent* MyScene;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MySceneComponent")
class UStaticMeshComponent* MyMesh;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MySceneComponent")
class UParticleSystemComponent* MyParticle;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MySceneComponent")
class UAudioComponent* MyAudio;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MySceneComponent")
class UBoxComponent* MyBox;
2. 通过CreateDefaultSubobject方法构造组件
3. 把SceneComponent作为根组件,通过SetupAttachment方法把其他组件绑定到根组件上
MyScene = CreateDefaultSubobject<USceneComponent>(TEXT("MyCustomScene"));
MyMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyCustomStaticMesh"));
MyParticle = CreateDefaultSubobject<UParticleSystemComponent>(TEXT("MyCustomParticleSystem"));
MyBox = CreateDefaultSubobject<UBoxComponent>(TEXT("MyCustomBox"));
MyAudio = CreateDefaultSubobject<UAudioComponent>(TEXT("MyCustomAudio"));
RootComponent = MyScene;
MyMesh->SetupAttachment(MyScene);
MyParticle->SetupAttachment(MyScene);
MyBox->SetupAttachment(MyScene);
MyAudio->SetupAttachment(MyBox);