本文主要是介绍动态加载类LoadClass 打包后资源缺失 的解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一.出现错误
献上代码,在我自己的PlayerController里。加载继承了我C++类的Widget
void AMyPlayerController::BeginPlay()
{Super::BeginPlay();FString WidgetClassLoadPath = FString(TEXT("/Script/UMGEditor.WidgetBlueprint'/Game/GameUI/UMG_Widget.UMG_Widget_C'"));UClass* widgetClass = LoadClass<UUserWidget>(NULL,*WidgetClassLoadPath); //动态加载UUserWidget* MyWidgetClss = nullptr;if (widgetClass){MyWidgetClss = CreateWidget<UUserWidget>(GetWorld(), widgetClass); //创建UUserWidgetif (MyWidgetClss){MyWidgetClss->AddToViewport();}else{GEngine->AddOnScreenDebugMessage(-1,5.0f,FColor::Red,TEXT("d"));}}else{GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("c"));}}
为什么这个代码,编译时正常加载,打包后一直打印c。如果不写if判断一下空指针,在编译状态下好好的。然后在打包好,就会崩溃。而网上这种动态加载类的方式,很常见。先加载UClass,在用CreateWidget<T>,创建你自己的widget类。
二.分析原因
写法肯定是没有问题的。说明指针空了,而且打包以后空了。后来查过相关资料,发现打包只会将蓝图引用过的资源打进去。怪不得,但我按网上查的做法,都没有解决。
主要思路,就是在打包的时候,将想要多打的文件夹打进去。
三.解决方案
1.Packaging Settings(也可以在ProjectSetting里找)
2.好多,都说用其他的。但用to Cook 我这个项目的问题,才解决。
试过下面这种,并没有解决。上面这个可以,实现动态加载,多打包的资源。
这篇关于动态加载类LoadClass 打包后资源缺失 的解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!