StaticClass()获取类
基本用法:
UClass* MyClass = AMyActor::StaticClass();
此时没有生成任何Actor,只是获取了AMyActor这个类型,其中UClass* 储存类信息。StaticClass告诉函数,需要处理哪一种类。例如,查找场景中的所有AMyActor类:
TArray<AActor*> FoundActors; UGameplayStatics::GetAllActorsOfClass( GetWorld(), AMyActor::StaticClass(), FoundActors );此处的StaticClass告诉函数查找AMyActor这种类型的所有Actor。
与GetClass()的区别:
GetClass()是从一个已经存在的对象,获取它实际是什么类型:
AActor* SomeActor = ...; UClass* ClassB = SomeActor->GetClass();TSubclassOf
基本用法:
TSubclassOf保存要生成哪一种Actor类
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Spawn")
TSubclassOf<AActor> ActorClass;
这样可以在细节面板或蓝图面板中选择AActor类(或AActor的子类),被选择的Actor类不需要在场景中实例化。
注意:此处被选择的Actor类,可以是蓝图类,可以是C++类,可以是基础自C++的蓝图类。
与AActor* 的区别:
AActor* 要使用这个actor,必须先有一个实例。
AActor* TargetActor = nullptr;实例不一定是手动放进去的,AActor可以指向内存中已经创建出来的某个AActor实例,可以是:
- 在关卡编辑器中提前放置的;
- 游戏运行时通过
SpawnActor生成的; - UE 自动创建的,例如玩家控制器;
- 通过函数查找到的已有 Actor。
SpawnActor
TSubclassOf<AActor> BoxClass; FActorSpawnParameters SpawnParams; AActor* SpawnedBox = GetWorld()->SpawnActor<AActor>( BoxClass, SpawnLocation, SpawnRotation, SpawnParams );FActorSpawnParameters 定义为传给 SpawnActor() 的“可选参数结构体”,其中包含 Owner、Instigator、碰撞处理方式等设置。
初学阶段,可以暂不用SpawnParams。