使用虛幻引擎源碼版本的人都知道,安裝好一個源碼版的引擎,除了大部分時間在編譯引擎上時,比較耗時的就是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