UE4使用BuildGraph構(gòu)建二進(jìn)制版本虛幻引擎
????????我得吐槽一下這個(gè)工具,至少在我這是不怎么好用的??梢哉f(shuō)整個(gè)過(guò)程極其曲折,我甚至一度想砸電腦。雖然過(guò)幾年后回頭看這段文字我可能會(huì)嘲笑自己的無(wú)知,體會(huì)其中的高明之處。不過(guò)我今天還是要吐槽一波,也能幫大多數(shù)的人踩坑,避免再次踏雷。我還因此折損了一塊Nvme,廢話不多說(shuō)了。
第一步:選擇好git工具并且設(shè)置本地git的忽略選項(xiàng)。
?不管你是從GitHub上Clone還是下載安裝包,這里途徑和其他地方?jīng)]有區(qū)別。我是直接下載的zip文件。
1.選擇工具
我用的是GitKraken(https://www.gitkraken.com/download/windows64)當(dāng)然也有用GithubDesktop客戶端的,這能在你修改代碼中幫你記錄和創(chuàng)建分支等等。極大的幫助你協(xié)作開發(fā),我還是很建議各位去使用這種工具。比如我就靠這東西拯救了我修改的源代碼。

2.設(shè)置忽略選項(xiàng)
誤區(qū):我們?cè)趧?chuàng)建虛幻的git庫(kù)時(shí)時(shí)常就會(huì)我打開我的git就得等半個(gè)小時(shí)的感覺,就不用說(shuō)第一添加git的時(shí)候了,而且git占用的空間特別大,檢索緩慢。大部分的問(wèn)題就出在這里。因?yàn)樵诘谝粍?chuàng)建git的庫(kù)時(shí),提示需要記錄跟蹤的文件就有18萬(wàn)個(gè)文件,而且這個(gè)地方還有一個(gè)更坑的地方。每當(dāng)編譯完,VS就會(huì)創(chuàng)建很多臨時(shí)文件和新編譯好的文件。一些二進(jìn)制文件等等。導(dǎo)致每次可能需要手動(dòng)去除或者一把添加,越用越卡。這種搞法志強(qiáng)都不夠用。不能偷的懶絕對(duì)不能偷。
在我們建立自己的git庫(kù)之前,我們需要調(diào)整到自己合適的跟蹤目錄,其他目錄屏蔽掉。

先來(lái)看看這個(gè)文件寫了什么?

帶“!”符號(hào)的代表保留,如果不需要跟蹤怎么處理呢? 把“!”去掉即可。配置文件的結(jié)構(gòu)也是自上而下的。所以...你只要后面覆蓋了之前的配置效果一樣。

包括去除一些不需要跟蹤的文件,這樣下來(lái)需要跟蹤的文件大概也就1萬(wàn)多個(gè),當(dāng)然這里需要根據(jù)自己的需求設(shè)定自己要跟蹤的庫(kù)文件。比如技美改的更多的是shader文件夾下內(nèi)容。當(dāng)然也會(huì)出現(xiàn)后期需要跟蹤的部分怎么辦呢?只需要把需要的目錄前加上“!”。
這里就能解決跟蹤文件的問(wèn)題,這里沒把我少坑。這個(gè)坑浪費(fèi)了我很多時(shí)間在添加庫(kù)。
第二步:修改引擎源碼(每個(gè)改引擎的人需求都各不相同,不做詳細(xì)敘述。各有各的坑等著踩,用VS構(gòu)建完驗(yàn)證編輯器正常后再進(jìn)行下面的)
第三部:使用BuildGraph構(gòu)建引擎
我愿稱這部分為最坑的部分,請(qǐng)一定好好閱讀。這是一步步踩坑得出來(lái)的,我在改4.26時(shí)還沒遇到這樣的事。下面逐條來(lái)講述。
第一步及建議:請(qǐng)不要將你的引擎源碼放在你的系統(tǒng)盤所在的這塊硬盤編譯,并找塊固態(tài)來(lái)編譯
????????切記!切記!這一條。因?yàn)槟愕墓虘B(tài)硬盤使用壽命是有擦寫次數(shù)的。特別是當(dāng)你沒摸清楚固定的流程的時(shí)候,你可能配置需要往復(fù)調(diào)整。硬盤來(lái)回擦寫你的硬盤撐不了多久就得離你而去。而且放在系統(tǒng)盤下,還可能整出各種奇葩問(wèn)提。怎么來(lái)形容這個(gè)寫入和寫出量呢?裝個(gè)系統(tǒng)也就30GB但你編寫虛幻,然后編譯二進(jìn)制得占用多大空間呢?以4.27為例。源碼+編譯出來(lái)的約為120GB,然后是打包install的DDC約為50GB左右,最后成品的引擎是50GB左右。也就是220GB左右,并且都是零散文件。這還不包括,在編寫時(shí)存在虛擬內(nèi)存里來(lái)回擦寫的部分,這個(gè)數(shù)據(jù)量一直以最大擦寫速度在操作。而且很過(guò)分的是當(dāng)你編譯得差不多的時(shí)候才提示報(bào)錯(cuò)信息。如果不會(huì)查看構(gòu)建日志,然后恰好又關(guān)閉了,整個(gè)人就會(huì)陷入自閉了。
????????為什么要找塊固態(tài)呢,對(duì)于大部分人來(lái)說(shuō)時(shí)間也是一種寶貴的資產(chǎn)。一般的機(jī)械盤實(shí)在是太慢了,而且是寫入零散文件。真的不建議大家在機(jī)械盤上編譯。比固態(tài)慢上4到5倍,這時(shí)你的CPU吃不滿,大部分時(shí)間會(huì)來(lái)摸魚。最佳方案是買一塊SSD用來(lái)編譯,然后用一塊機(jī)械盤來(lái)存儲(chǔ)編譯好的文件。
第二步及建議:用虛幻文檔作為參考,然后好好閱讀InstallEngineBuild.xml

為什么這么說(shuō)呢?因?yàn)楣俜經(jīng)]來(lái)得及修改這塊的文檔,如下圖中已經(jīng)移除了部分可構(gòu)建選項(xiàng)。來(lái)看一下,順帶看一下當(dāng)前的編譯配置。


然后其中包含一些可優(yōu)化的部分,這個(gè)得根據(jù)個(gè)人來(lái)適當(dāng)調(diào)整。

而開啟了 `-allmodules`,則意味著引擎中所有的模塊都要重新編譯,是完整地編譯引擎。當(dāng)下次執(zhí)行,還是要完整地編譯整個(gè)引擎,UBT 中具有對(duì) `-allmodules` 的介紹:
`-allmodules` 參數(shù)是定義在 UBT 的 `TargetRules.cs` 中的:專門用來(lái)構(gòu)建安裝版引擎的,我覺得可以關(guān)掉,使用增量編譯的方式執(zhí)行,不然在 ci 上每次執(zhí)行都太慢了。
而且這個(gè)腳本中對(duì)每個(gè)平臺(tái)都執(zhí)行了兩遍,一遍是不含 `-nolink` 參數(shù)的,一遍是包含 `-nolink` 參數(shù)的,可以根據(jù)自己的需求決定是否關(guān)閉。
我的建議是:新手先不做調(diào)整,當(dāng)編譯成了幾次后對(duì)流程有一定了解后可以修改,大約能縮短一倍時(shí)間。之所以不建議新手直接去除這部分,是因?yàn)楫?dāng)普通的部分都搞不定,采用優(yōu)化后的腳本,萬(wàn)一出現(xiàn)新的問(wèn)題壓根不會(huì)解決。
第三步及建議:關(guān)于安裝Win10SDK的部分
????????這一步同樣重要,這決定你會(huì)不會(huì)浪費(fèi)幾天時(shí)間來(lái)處理關(guān)于缺少“PDBCOPY.EXE”這個(gè)Bug的解決辦法,同樣是“驚喜”不斷。
先說(shuō)幾種情況:
下載過(guò)于新得SDK版本:這個(gè)不是必須操作,因?yàn)橛写?yàn)證。
我遇到的問(wèn)題就是,當(dāng)我從微軟官方下載了新的SDK后,編譯出現(xiàn)了宏定義錯(cuò)誤。光是卸載“SDK”包是不能修復(fù)錯(cuò)誤的。只有卸載VS后重新安裝才能正常的編譯版本。


安裝不需要使用的包同樣會(huì)導(dǎo)致編譯install版本出錯(cuò):

正確做法是:

第四步及建議:選擇合適的配置,創(chuàng)建按自己的構(gòu)建版本。
我的配置:
RunUAT.bat BuildGraph -target="Make Installed Build Win64" -script=Engine/Build/InstalledEngineBuild.xml -set:WithWin64=true -set:WithWin32=false -set:WithMac=false -set:WithAndroid=false -set:WithIOS=false -set:WithTVOS=false -set:WithLinux=false -set:WithLinuxAArch64=false -set:WithLumin=false -set:WithLuminMac=false -set:WithHoloLens=false -set:WithClient=true -set:WithServer=true -set:VS2019=true -clean
這里有個(gè)建議:擁有使用visual studio 2019 的開啟 VS2019=true。至少在我使用的時(shí)候,如果不設(shè)置是報(bào)錯(cuò)的。問(wèn)題我也懶得查了,因?yàn)槿罩咎崾臼俏粗e(cuò)誤。建議不用去嘗試,因?yàn)閳?bào)錯(cuò)只有當(dāng)所有操作搞完才報(bào),而且installDDC都出來(lái)了。
然后就是漫長(zhǎng)的等待,希望能幫到需要的人。特意寫下這個(gè)文章,沒準(zhǔn)能幫你剩下幾天時(shí)間。