zoukankan      html  css  js  c++  java
  • 2.pak的组成和加载过程

    pak包含什么
    pak文件像是zip压缩包,包含了游戏资源文件,如 uasset、umap;以及非资源文件,如 .txt、.json。
    除了这些文件本身,还要有对文件信息的记录,不仅是pak信息,还有包含文件的信息。
    1. FPakInfo记录了pak的信息,如是否加密、密钥、版本号等
    2. FPakEntry记录了pak中每个文件的信息,如压缩信息,文件大小,哈希值等
    pak的序列化
    1. 首先要放入资源及非资源文件,这一步可以进行压缩(可选)。
    2. 填充FPakInputPair对象数据,FPakInputPair中包含路径字符串和FPakEntry,路径名用来索引文件,FPakEntry包含该文件基本信息。这一步用的是通过 PrepareCopyFileToPak函数完成,如果上一步有进行压缩,则使用类似的PrepareCopyCompressedFileToPak完成
    3. 对文件内容进行加密(可选), 最后计算文件内容的hash值
    4. 将FPakEntry的数据写入pak文件,再写入文件内容,pak文件所要包含的两部分内容已经填充完成。
    5. 再依次写入挂载点MountPoint,为后续挂载过程提供目标地址。 以及写入存储在pak中的文件数量。对于每个pak中的文件,要分别写入文件路径名和FPakEntry的数据。最后写入FPakInfo的内容。
    最终整个pak文件的序列化结构如下:
    pak文件
    {
        [
            (FPakEntry)
            [
                文件偏移
                文件大小
                解压后大小
                压缩方式
                时间戳(可选,根据Version来决定)
                Hash(验证文件是否被修改)
                压缩块(如果启用了压缩的话)
                标记(可选,根据Version来决定。标记是否加密,是否删除)
                压缩块大小(可选,根据Version来决定)
            ]
    
            文件内容
        ]
        MountPoint
        文件数量
        [
            文件名
            (FPakEntry)(同上)
        ]
        (FPakInfo)
        [
            密钥
            加密标记
            魔数
            版本号
            Pak索引内容的偏移(所有的PakEntry序列化后,也即MountPoint在pak文件中的位置)
            Pak索引内容的大小(索引内容是从MountPoint到密钥之前的数据)
            Pak索引内容的Hash
        ]
    }
    加载pak前的挂载
     
    引擎加载pak包时会在一下目录中搜索.pak文件:
    [Demo]/Content/Paks/"
    [Demo]/Saved/Paks/"
    Engine/Content/Paks/"
     
    pak包的加载要通过挂载完成,就是先保存该资源所在的路径,再通过路径将资源加载到内存中。一些关键词:
    挂载(Mount):保存资源的路径,加载时就通过该路径找到资源
    加载(Load):将资源加载到内存,注意必须先挂载才能加载
    挂载点(MountPoint):即将文件虚拟的挂载到某个路径上,在UE4中即为/Game可以直接读取到的位置
     
     
    参考资料:
     
  • 相关阅读:
    react路由传参的三种方式:
    毕设登录逻辑分析
    redis缓存数据库的配置和分析
    c#窗体虚线图形验证码设计
    C#窗体技巧
    关于子窗体的层级关系
    安装SQL SERVER开启SA用户登录的方法
    SQL中CONVERT日期不同格式的转换用法
    sql server中自连接的使用
    IFieldEdit Interface 接口
  • 原文地址:https://www.cnblogs.com/Archimedes/p/15525205.html
Copyright © 2011-2022 走看看