I can’t find a way to list all the Actors inside sublevel (LevelStreaming). For an enumeration, I try to use TActorIterator, but its constructor accepts a reference to UWorld, it does not accept a reference to ULevelStreaming, since they both inherit from UObject. I can list all the Actors from the world like this:
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
//another code
}
This works, but I only get objects from the main map (Persistent Level), and I have no idea how to get a list of all the Actors from the additional levels that I add as ULevelStreaming.
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());
}
}