# 常见打包问题
# 由于UnrealEd
提示信息为:ERROR: Unable to instantiate module 'UnrealEd': Unable to instantiate UnrealEd module for non-editor targets.
解决方法:
在提示信息中找到使用UnrealEd的模块,比如"DatasmithImporter"。
# 使用ActorLabel
提示信息为:error C2039: 'GetActorLabel': is not a member of 'AActor'。
解决方法:
Actor labels 只在编辑器开发模式下有用,这种情况可以使用Actor Tags。
//检测是否有某个Tag
Actor->ActorHasTag(targetTag);
//添加某个Tag
Actor->Tags.Add(FName("added Tag"));
2
3
4
5
# 文件路径过长
提示信息为:Couldn't save package, filename is too long (268 >= 260)
解决办法:
把项目复制到根目录下重新打包,一般都可以通过。
# forceinline导致错误
forceinline会导致error LNK2019: unresolved external symbol。此时需要把inline函数放到其头文件中。
# 找不到蓝图
提示信息为:Error: COD Constructor (MyGameMode): Failed to find /Game/MyProject/MyBlueprint.MyBlueprint
上面的错误是由下面代码导致的:
static ConstructorHelpers::FClassFinder<AActor> UnitSelector(TEXT("Blueprint'/Game/MyProject/MyBlueprint.MyBlueprint'"));
TSubclassOf<AActor> UnitSelectorClass = UnitSelector.Class;
2
解决方法:
使用copy reference复制蓝图路径时,在末尾添加_C,比如:
static ConstructorHelpers::FClassFinder<AActor> UnitSelector(TEXT("Blueprint'/Game/Blueprints/MyBlueprint.MyBlueprint_C'")); TSubclassOf<AActor> UnitSelectorClass = UnitSelector.Class;
1
2移除路径前缀:
static ConstructorHelpers::FClassFinder<AActor> UnitSelector(TEXT("/Game/Blueprints/MyBlueprint")); TSubclassOf<AActor> UnitSelectorClass = UnitSelector.Class;
1
2
注意FClassFinder<T>的模板名不能直接写UBlueprint,比如FClassFinder<UBlueprint>是不对的,该蓝图的父类是啥,模板名应该写该父类,如果它的父类是Actor,就应该写为FClassFinder<AActor>。
# 打包有调试信息
我们程序如果打包后崩溃,调试会比较麻烦,这个时候需要让打包的程序包含调试符号。设置方法在:
Project Settings->Packaging->Project->Include Debug Files。