Unreal 踩坑记录

Cannot create SoftObjectPath with short package name 'False'!

  • 表现:在Cook 阶段会报错,样子大概是这样:


    打包报错
  • 原因: UE4editor在蓝图中创建变量,默认为Bool 类型,而且默认值为False,当我需要把它的类型修改为 Actor(或者其它对象)时,它的默认值会继续为False,而不是null。

  • 如何排查?
    在Editor 模式下,打开怀疑有问题的 BP,便会触发这个报错,如果有条件的话,可以写个脚步,把对象都加载一遍,便能看到这个报错了。

  • 如何解决?
    删除这个变量 -> 重新创建 -> 类型修改为Object -> 点蓝图左上角的编译 -> 将默认值修改为 NULL -> 类型修改为Actor(你要的类型)

FPakPlatformFile 为空

  • 表现:
FPakPlatformFile*  HandlePakPlatform = (FPakPlatformFile*)(FPlatformFileManager::Get().FindPlatformFile(FPakPlatformFile::GetTypeName()));
    if (!HandlePakPlatform)
    {
        UE_LOG(LogTemp, Warning, TEXT("FPakPlatformFile == NULL"));
    }else
    {
     UE_LOG(LogTemp, Warning, TEXT("FPakPlatformFile is OK"));
    }

在手机上输出为:

FPakPlatformFile == NULL
  • 原因:
    Unreal 的文件系统是个责任链模式,一环套一环,在初始化时,通过规则创建好,运行时通过 PlatformFileManager 来获取。如果在初始化时,某个 PlatformFile 没有满足条件,便不会被创建,在 PlatformFileManager 中便也 Find 不成功。
  • 如何排查?
    查看源代码,有两种情况会导致这种现象(源码在 LaunchEngineLoop.cpp 中的 LaunchCheckForFileOverride 方法中):
    • ProjectContentDir ,ProjectSavedDir,EngineContentDir 三目录下面没有 .pak 文件
    • 运行参数里有 -NoPak 参数
  • 最终定位问题为:在打包时,没有设置 -pak 参数,再加上项目里也没有手动添加 pak 文件,便触发了 ProjectContentDir ,ProjectSavedDir,EngineContentDir 三目录下面没有 .pak 的条件,导致初始化时 没有创建 FPakPlatformFile

Commandlet 模式下 AssetRegistryModule.Get().GetSubPaths 查找不到子目录

  • 表现
    指定目录下面有不少子目录,但是在Commandlet 模式下用 AssetRegistryModule.Get().GetSubPaths 死活都找不到,在 Editor 里是可以的。
    看了相关代码,发现它是首先在 CachedPathTree 查找对于的根目录,然后在循环查找

void UAssetRegistryImpl::EnumerateSubPaths(const FString& InBasePath, TFunctionRef Callback, bool bInRecurse) const
{
    EnumerateSubPaths(*InBasePath, [&Callback](FName Path)
    {
        return Callback(Path.ToString());
    }, bInRecurse);
}

void UAssetRegistryImpl::EnumerateSubPaths(const FName InBasePath, TFunctionRef Callback, bool bInRecurse) const
{
    CachedPathTree.EnumerateSubPaths(InBasePath, Callback, bInRecurse);
}

而 CachedPathTree 又在初始化时从配置表中读入

    /** The tree of known cached paths that assets may reside within */
    FPathTree CachedPathTree;
  • 解决方案:
    加入相应的查找目录


    image.png

问题:开屏mp4播放黑屏

解决方案:

将视频格式设置为:视频格式: MP4 MPEG4编码

你可能感兴趣的:(Unreal 踩坑记录)