【发布时间】:2021-07-16 23:45:16
【问题描述】:
我要做的是从数据表中读取一系列路径,加载这些资产,然后按资产类型对它们进行排序,以便我可以对每个路径进行不同的修改。
因此,我需要从这些资产路径中分离出哪些是静态网格、actor 蓝图、编辑器实用程序小部件等。但由于某种原因,当我去拆分蓝图时,转换到 UBlueprint 总是失败。
顺便说一句,这是在加载阶段为 PostEngineInit 的编辑器插件的启动模块中。我不确定这是否与它有关。
for (FToolData Tool : ToolCategories[i]->Tools)
{
FStringAssetReference AssetPath(Tool.AssetPath);
UObject* Asset = AssetPath.TryLoad();
if (IsValid(Asset))
{
UBlueprint* BlueprintAsset = Cast<UBlueprint>(Asset);
if (IsValid(BlueprintAsset))
{
TSubclassOf<UObject> Parent = BlueprintAsset->ParentClass;
}
}
}
我也确定 Asset 是一个 UBlueprint。我可以看到它的父类是 Actor 就在那里,但由于某种原因 BlueprintAsset 仍然无效。
【问题讨论】:
-
Cast<UBlueprint>(Asset)不是标准的,可能是在您的程序或您正在使用的库中定义的。除非你描述它是什么,否则没有人能解释它为什么会失败。 -
"当我去拆分蓝图时,转换到 UBlueprint 总是失败" - 失败到底是怎么回事?是编译时失败还是运行时失败?有错误信息吗?
-
@Peter 抱歉,我很少使用堆栈溢出。我认为用虚幻引擎标记它会指定这是虚幻的。在问题中修复它。
-
IsValid几乎可以肯定没有达到您的预期。如果您进入它,它可能是一个带有 bool 或其他东西的版本(指针是隐式可转换的,因此编译器不会让您知道默认情况下正在发生这种情况)。if(Asset != nullptr)甚至if(Asset)在大多数情况下都绰绰有余。例外情况是当你真正关心是否有东西被标记为待杀时。
标签: c++ casting unreal-engine4