【UE4】根据路径动态加载蓝图类的正确方式

由于要在脚本里实现根据路径动态加载蓝图类,我添加了一个胶水方法。思路是加载一个蓝图文件,然后获取到其GeneratedClass。

1
2
auto BP = Cast<UBlueprint>(StaticLoadObject(UBlueprint::StaticClass(), nullptr, *Path));
UClass* Class = BP ? BP->GeneratedClass : nullptr

这个方法在桌面平台PIE的情况下没有什么问题,直到我们cook资源后,在移动平台上测试才出现了错误。因为,cook过的资源是没有蓝图对象的。

那么我们需要换一种写法:

1
UClass* Class = Cast<UClass>(StaticLoadObject(UClass::StaticClass(), nullptr, *Path));

这样一来,配置的路径也要相应的从
/Game/YOURDIR/BP_SomeBlueprint.BP_SomeBlueprint
改成
/Game/YOURDIR/BP_SomeBlueprint.BP_SomeBlueprint_C

当然还有一种糟糕的方式:修改DefaultEditor.ini
bDontLoadBlueprintOutsideEditor=true改成false
这种方式的本质是使cook过的资源也保留蓝图部分,会影响包大小,因此极其不推荐。