UE4 Gitdependencies CDN Package 制做

一、前言

使用虚幻引擎源码版本的人都知道,安装好一个源码版的引擎,除了大部分时间在编译引擎上时,比较耗时的就是Setup.bat从虚幻获取dependencies资源的部分。git

这些文件包括*.dll ,*.exe,美术资源等比较占用资源等内容,不适合放在Github上,因此官方本身作了一个叫"GitDependencies"的工具,虽然使用"--threads=100"参数能够提升下载的线程数,但若是网速限制,或者是在一些研发内网的状况,以及须要大量装机的时候,就不太方便.缓存

添加多线程下载能够提高下载速度至满带宽安全

二、Setup中GitDependencies过程

先分析GitDependencies执行过程,核心代码在 UnrealEngine\Engine\Source\Programs\GitDependencies\Program.cs 服务器

  • 初始化环境,解析参数

        GitDependencies.exe --prompt后面能追加的参数如图网络

其中几个可能会用到有多线程

--threads=N:开启N个线程下载,提高速度。函数

--dry-run:仅仅显示须要下载、更新等内容后直接退出,不进行实际的下载,局域网环境下,Git更新的时候也会运行GitDependencies,若是没法链接外网就会形成长时间等待超时,能够尝试使用这个参数跳过下载。工具

--cache=<PATH>:自定义下载时缓存包的位置测试

 

  • UpdateWorkingTree

        UpdateWorkingTree函数为主要执行逻辑部分,将前面的参数传入后,主要通过如下步骤               ui

  1. 检查已经剔除扫描的文件或文件夹
  2. 定义.ue4dependencies的位置,最后扫描更新完成后会生成一个.ue4dependencies文件
  3. 读取或建立一个manifest
  4. 移除以前的下载任务
  5. 读取xml文件中因此Files\Blobs\Packs的内容,虽然读取时会查找全部模块或是插件中的.gitdeps.xml为后缀的文件,但默认状况下只有一个D:\UnrealEngine\Engine\Build\Commit.gitdeps.xml 文件,这个文件也是后面工具主要使用的原始数据来源
  6. 遍历完所需的文件后,再剔除掉忽略的文件,以及临时文件是否须要替换。生成所需下载文件的列表
  7. 下载所需的文件包(文件包非最终的文件,一个是Packs,以Hash名为文件名,一个是Files,为最终的文件)
  8. 下载解压完成后,会生成一个.ue4dependencies,若是以及存在,则会更新文件列表和时间戳
  9. 最后对可执行的exe文件进行权限设定

主要步骤能够分为三部:一、收集下载内容  二、下载解压内容  三、记录内容关闭

DownloadDependencies是实际下载pack包的地方,也是用到网络的地方,有时候须要更新下载多个文件只须要下载一个包,有时下载一个文件也可能须要下载多个包,经过:

// Find all the required packs
			DependencyPackInfo[] RequiredPacks = Packs.Where(x => PackToBlobs.ContainsKey(x.Pack.Hash)).ToArray();

来判断找出当前须要下载的N个文件,须要下载哪些包资源。资源分为Incoming和Working两种状态,一个是下载过程当中,一个已经解压存放完成的,例如WorkingFile就有Timestamp记录文件下载的时间戳。

Files记录了文件名的信息,Blobs记录了文件所属的Pack和字节偏移数和字节大小,Pack为原始资源的二进制包,Files经过GetIncomingFilesForPack函数,传入Blobs参数,从Pack中解压出文件。

使用pack能够有几个好处,将大文件切分,保持源文件不可读/使用,规避下载exe或是dll后缀文件的安全问题。

3.Pack镜像资源

即便不使用cache参数,Pack下载的资源也已经存在本地,目录为:D:\UnrealEngine\.git\ue4-gitdeps\ 中,因此创建本身的Pack资源镜像时,不用彻底从http://cdn.unrealengine.com/dependencies 再次拉取(给它省点带宽),而是先从本地缓存的位置搜索Pack包,若是没有再从网上拉取,来创建资源镜像。

BaseUrl为下载连接的基础URL,顺便测试一下国内各个地方对虚幻这个CDN地址的访问速度

测试数据来源由上海云测网络科技提供:https://www.17ce.com/

资源pack的实际下载地址=BaseUrl+”/“+RemotePath+"/"+Hash

例如:下载Engine/Binaries/DotNET/AgentInterface.dll 须要下载10565092db8aab55124eac964964afe461a33072包,是除去包头的12288个字节大小的文件,10565092db8aab55124eac964964afe461a33072包总大小有2006146,压缩后是664170,

下载地址是:http://cdn.unrealengine.com/dependencies/UnrealEngine-4694924-e79d3fab97494aa18fa58bb07dc860e7/10565092db8aab55124eac964964afe461a33072

假设咱们先建一个镜像的根目录 UE4GitDPack/

那么我须要把【UnrealEngine\.git\ue4-gitdeps\10\10565092db8aab55124eac964964afe461a33072】文件复制到 UE4GitDPack/UnrealEngine-4694924-e79d3fab97494aa18fa58bb07dc860e7/中,若本地缓存未找到,则从网上下载。

最后咱们就会获得这样一个镜像目录:

随后将整个UE4GitDPack文件夹的内容,部署到本身的http服务或是文件服务上,再替换Commit.gitdeps.xml文件里的BaseUrl地址为本身服务器的地址,就能够构建本身的依赖镜像,Commit.gitdeps.xml文件有更新,就从新运行一次工具就能够了,甚至能够直接扩充GitDependencies的功能,加入一个自动创建本地镜像的功能,毕竟下载、拷贝、解压、查找包文件的功能,GitDependencies里面都包含了。

整个镜像大小约为:

实际是3101个files,出现3105是由于有Incoming文件

 

四、其余

其实在setup后的两步流程,安装UE4PrereqSetup_x64和引擎注册都很重要,新装环境

文中如有解释不对的地方,欢迎指正。

镜像制做工具下载:

连接: https://pan.baidu.com/s/1IUQQ36A6-O_MfJ8xgXT1gw 提取码: 2m8n

相关文章
相关标签/搜索