c++ - 如何列出 ULevelStreaming 中的所有演员?
问题描述
我找不到列出子关卡 (LevelStreaming) 中所有 Actor 的方法。对于枚举,我尝试使用 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
}
这可行,但我只从主地图(持久关卡)中获取对象,我不知道如何从我添加为 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());
}
}
解决方案
首先 - 必须加载级别。然后你可以使用GetLoadedLevel来获取ULevel。并且ULevel已经有了Actors - 所有actors的数组
UWorld* world = GetWorld();
auto StreamingLevels = world->GetStreamingLevels();
for (UStreamingLevel* StreamingLevel : StreamingLevels ) {
ULevel* level = StreamingLevel->GetLoadedLevel();
if(!level)
continue;
for (AActor* Actor : level->Actors)
{
// Actor
}
}
推荐阅读
- go - 为什么 pprof heap inuse_space 小于 container_working_set_size?
- node.js - Mkcert 在 Node docker 容器上生成 rootCA,Browsersync over https 不安全
- php - 使用 fsockopen 连接到在另一个 PHP 实例中打开的监听端口
- shopify-app - Shopify 节点应用未显示应用嵌入主题设置
- javascript - 发送邮件时保留文本区域的换行符
- jsf - JSF 和 Bootstrap5
- c# - C# 从 IQueryCollection 读取数组
- android - Updating 2 Column of a SQL LITE Database from Different Method Not Working?
- java - Android BluetoothManager can't disconnect bluetooth device
- sql - Django 使用模型值进行注释