如何使用 CUE4Parse 读取 UE4 本地化文件?

问题描述 投票:0回答:1

我正在尝试使用 CUE4Parse 从未加密的 UE4 PAK 文件中读取本地化文件(.locres 和 .locmeta)。但是当我尝试调用 LoadObject 或 LoadObjectAll 来读取文件时,我收到错误消息,提示找不到 .uasset

c# unreal-engine4
1个回答
0
投票

查看 LoadLocalization 中的代码展示了如何通过从“文件”创建存档读取器,然后从读取器实例化相关对象来解决此问题。我使用以下代码提取与目录模式匹配的所有 LOC 文件。

var cacheDir = Environment.GetEnvironmentVariable("TMP");
cacheDir = cacheDir.Replace("\\", "/");

Log.Logger = new LoggerConfiguration().WriteTo.Console(theme: AnsiConsoleTheme.Literate).CreateLogger();

var gameDir = {Directory where PAK files Live};
var provider = new DefaultFileProvider(gameDir, SearchOption.AllDirectories, false, new VersionContainer(EGame.GAME_UE4_27));

// Scan local files and read them to know what it has to deal with (PAK/UTOC/UCAS/UASSET/UMAP)
provider.Initialize();

// Decrypt basic info (1 guid - 1 key)
provider.SubmitKey(new FGuid(), new FAesKey(AES key for game or all 0s if not encrypted)); 

provider.LoadLocalization(ELanguage.English);

foreach(var key in provider.Files.Keys)
{
    if(key.Contains({partial path for LOC files}))
    {
        var outPath = cacheDir+$"/LOC/{game}" + key[(key.IndexOf(_locFilesDir)+_locFilesDir.Length-1)..(key.LastIndexOf('/')+1)];
        new FileInfo(outPath).Directory.Create();
        var file = provider.Files[key];
        file.TryCreateReader(out var archive);

        if(key.EndsWith(".locres"))
        {
            var locres = new FTextLocalizationResource(archive);
            var locJson = JsonConvert.SerializeObject(locres, Formatting.Indented);
            File.WriteAllText(outPath + "Game.json", locJson);
        }
        else if(key.EndsWith(".locmeta"))
        {
            var locmeta = new FTextLocalizationMetaDataResource(archive);
            var locJson = JsonConvert.SerializeObject(locmeta, Formatting.Indented);
            File.WriteAllText(outPath + "Game.json", locJson);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.