使用虚幻引擎源码版本的人都知道,安装好一个源码版的引擎,除了大部分时间在编译引擎上时,比较耗时的就是Setup.bat从虚幻获取dependencies资源的部分。git
这些文件包括*.dll ,*.exe,美术资源等比较占用资源等内容,不适合放在Github上,因此官方本身作了一个叫"GitDependencies"的工具,虽然使用"--threads=100"参数能够提升下载的线程数,但若是网速限制,或者是在一些研发内网的状况,以及须要大量装机的时候,就不太方便.缓存
添加多线程下载能够提高下载速度至满带宽安全
先分析GitDependencies执行过程,核心代码在 UnrealEngine\Engine\Source\Programs\GitDependencies\Program.cs 服务器
GitDependencies.exe --prompt后面能追加的参数如图网络
其中几个可能会用到有多线程
--threads=N:开启N个线程下载,提高速度。函数
--dry-run:仅仅显示须要下载、更新等内容后直接退出,不进行实际的下载,局域网环境下,Git更新的时候也会运行GitDependencies,若是没法链接外网就会形成长时间等待超时,能够尝试使用这个参数跳过下载。工具
--cache=<PATH>:自定义下载时缓存包的位置测试
UpdateWorkingTree函数为主要执行逻辑部分,将前面的参数传入后,主要通过如下步骤 ui
主要步骤能够分为三部:一、收集下载内容 二、下载解压内容 三、记录内容关闭
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后缀文件的安全问题。
即便不使用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