我找不到一种方法来列出子关卡(LevelStreaming)中的所有演员(Actors)。对于枚举,我尝试使用 TActorIterator,但它的构造函数接受 UWorld 的引用,而不是 ULevelStreaming 的引用。由于它们都继承自 UObject,而 ULevelStreaming 不继承自 UWorld。我可以像这样列出世界上的所有演员:
UWorld* world = GetWorld();
TActorIterator<AActor> Iterator(world, AActor::StaticClass());
for (; Iterator; ++Iterator)
{
AActor* Actor = Cast<AActor>(*Iterator);
GEngine->AddOnScreenDebugMessage(-1, 30.f, FColor::Yellow, Actor->GetFName().ToString()); //Print name of the Actor
}
这个方法可以使用,但是它只能获取到主地图(Persistent Level)中的对象,我不知道如何获取添加为 ULevelStreaming 的附加关卡中的所有 Actor 对象列表。
以下是我的尝试,但是它无法正常工作:
UWorld* world = GetWorld();
auto levels = world->GetStreamingLevels();
for (auto level : levels) {
ULevelStreaming* currentLevel = Cast<ULevelStreaming>(level);
TActorIterator<AActor> It(currentLevel, AActor::StaticClass()); //Here is compiler error with TActorIterator's constructor
for (; It; ++It)
{
AActor* Actor = Cast<AActor>(*It);
GEngine->AddOnScreenDebugMessage(-1, 30.f, FColor::Yellow, Actor->GetFName().ToString());
}
}