小编Ker*_*iro的帖子

虚幻引擎 4:在打包游戏中使用 AssetRegistry 加载 PAK 文件、加载/挂载它们以及加载资源的正确方法是什么?

我想这样做:创建并打包原创游戏。然后我想根据原始游戏中的蓝图创建带有新网格/声音/动画和蓝图的附加 PAK 文件。原始游戏不应该知道任何关于附加网格/动画/等的信息。因此,我需要在原始游戏中使用 AssetRegistry 创建一个智能系统,扫描所有 PAK 文件,加载/挂载它们,并使用 AssetRegistry 扫描这些 PAK 文件中的所有资产。

我为实现目标所做的事情:我为目标平台(Windows 独立版)成功创建并打包了原始游戏。然后在项目中,我创建附加内容并为目标平台烘焙它们。我使用 UnrealPak.exe 为附加内容创建 PAK 文件。我可以通过将 PAK 文件放在 Paks 文件夹中来加载/挂载原始游戏中的 PAK 文件,并且它们在游戏启动时加载/挂载(这句话是基于原始游戏中的 LOG 文件,我不知道如何来检查它是否真实)。我什至可以使用 FCoreDelegates::OnMountPak.Execute 来加载/挂载 PAK 文件(这句话也是基于原始游戏的 LOG 文件)。因此加载/挂载 PAK 文件应该可以正常工作。但现在最大的问题在哪里。我想使用 AssetRegistry 扫描所有 PAK 文件中的所有资产。我尝试了我想出的一切。我尝试了 ScanPathsSynchronous 方法、GetAllAssets 方法。唯一发生的事情是它从原始游戏 PAK 文件加载资产。看来 AssetRegistry 对其他 PAK 文件一无所知。我试图用 AddPath 方法告诉 AssetRegistry 这些文件在哪里,但仍然不起作用。

所以我尝试过的示例代码在这里:

         FString path1 = FPaths::ConvertRelativePathToFull(FString("../../../TestPaks/Content/Paks/test.pak"));
     FString path2 = FPaths::ConvertRelativePathToFull(FString("../../../TestPaks/Content/Paks/testmaterial.pak"));        

     bool check1 = false;
     bool check2 = false;
     if (FCoreDelegates::OnMountPak.IsBound())
     {
         check1 = FCoreDelegates::OnMountPak.Execute(path1, 0, nullptr); //Number should be 0-4; specifies …
Run Code Online (Sandbox Code Playgroud)

unreal-engine4

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

unreal-engine4 ×1