UCPT_HomePage继承自UUserWidget,在某个函数下使用LoadClass加载Content下的蓝图资产:
1
2
3
4
|
void UCPT_HomePage::ConstructRecentProjectPanel(TArray<FString> TRecentProjectInfo)
{
TSubclassOf<UCPT_UnitProjectButton> UnitProjectButton = LoadClass<UCPT_UnitProjectButton>(nullptr, TEXT("/Game/Blueprints/UI/UnitUI/WPT_UnitProjectButton.WPT_UnitProjectButton_C"));
}
|
BUG:这样写在编辑器状态下没问题,可以正常加载资产,UnitProjectButton有效。但是打包后,UnitProjectButton是空的,也就是说无法加载指定路径的资产。(已验证:蓝图路径没问题,确实存在)
原因:搜索发现,导致此BUG的原因是,由于WPT_UnitProjectButton资产没有被外界引用,比如蓝图没有被显式引用(如直接拖入关卡或被资源表单引用),可能会被 Unreal 的打包流程优化掉。
解决方案:确保资源被打包了。
方案1:显式引用资源:在任意代码模块的构造函数中引用蓝图路径来确保加载。例如,添加一个加载步骤来触发依赖打包:
1
2
3
4
5
6
7
8
9
|
UCPT_HomePage::UCPT_HomePage(const FObjectInitializer& ObjectInitializer)
:Super(ObjectInitializer)
{
ConstructorHelpers::FClassFinder<UUserWidget> WPT_UnitProjectButton(TEXT("/Game/Blueprints/UI/UnitUI/WPT_UnitProjectButton.WPT_UnitProjectButton_C"));
if (WPT_UnitProjectButton.Succeeded())
{
UnitProjectButton = WPT_UnitProjectButton.Class;
}
}
|
方案2:使用 Cooking 设置加载资源
打开 Project Settings -> Packaging -> Advanced Settings。
在 Additional Asset Directories to Cook 添加你的 UnitUI 目录 (/Game/Blueprints/UI/UnitUI)。