由于要在脚本里实现根据路径动态加载蓝图类,我添加了一个胶水方法。思路是加载一个蓝图文件,然后获取到其GeneratedClass。1
2auto 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过的资源也保留蓝图部分,会影响包大小,因此极其不推荐。