Unity 2017 3 新功能 程式集定義檔案

2021-09-07 19:56:53 字數 2764 閱讀 8519

我們已經為大家介紹過以及。今天我們將為大家介紹unity 2017.3中的新功能:程式集定義檔案assembly definition file。

程式集定義檔案assembly definition file,使用該特性,開發者可以在乙個資料夾中自定義託管程式集。定義明晰的依賴檔案,可以確保指令碼被更改後,只會重新生成必需的程式集,減少編譯時間。

開發者的專案越大,編譯時間必然會越長。而在進行專案迭代時,這很容易會成為乙個問題,因此設定好正確的程式集定義檔案可以助力提高工作效率,減少等待指令碼編譯的時間。

指令碼編譯—程式集定義檔案

unity自動定義指令碼編譯為託管程式集的方式。unity編輯器中進行指令碼更改迭代的編譯時間會隨指令碼數量的增加而增加。當然, 在進行迭代時,我們一定是希望編譯的速度越快越平順越好。

你可以使用新的程式集定義檔案特性,基於資料夾中的指令碼定義你自己的託管程式集。如果你將專案指令碼分為多個程式集,並進行良好的依賴定義,可以確保你在更改某個指令碼時,只會重新生成必需的程式集。這減少了編譯時間,因此你可以在unity專案中將每個託管程式集看做是單個的庫。

(圖 01)

圖01展示的是可以將專案指令碼分為多個程式集。如果你僅僅更改了main.dll中的指令碼,那其它程式集都不需要重新編譯。由於main.dll包含的指令碼更少,因此它的編譯速度比assembly-csharp.dll更快。 同樣的,你對stuff.dll的更改,僅會導致main.dll和stuff.dll重新編譯。

如何使用程式集定義檔案

程式集定義檔案是資源檔案,可以通過assets > create > assembly definition選單建立。它們的副檔名是.asmdef。

你可以將乙個程式集定義檔案新增到unity專案中的乙個資料夾裡,對該資料夾裡所有的指令碼進行編譯,然後在檢視視窗中對程式集名稱進行設定。

注意:程式集定義檔案所在的資料夾名稱,以及程式集定義檔案的檔名,對程式集的名稱毫無影響。

(圖 02)

你還可以使用檢視視窗新增對專案中其它程式集定義檔案的引用。編譯程式集和定義程式集間的依賴時會用到這些引用。

unity使用引用來編譯程式集,以及定義程式集之間的依賴關係。你可以在檢視視窗中設定程式集定義檔案的平台相容性,也可以選擇排除或包括特定平台。

資料夾層級中的多程式集定義檔案

如果在乙個資料夾層級中,有多個程式集定義檔案(副檔名:asmdef),將會使每個指令碼被新增到最短路徑距離的程式集定義檔案中去。

示例假設你有乙個assets/examplefolder/mylibrary.asmdef和乙個assets/examplefolder/examplefolder2/utility.asmdef檔案,那麼:

程式集定義檔案不屬於生成系統的檔案

注意:程式集定義檔案不屬於程式集生成檔案。它們不支援在生成系統中常見的條件化生成規則。

這也是程式集定義檔案不支援預處理指令(定義)的原因,因為它們一直是靜態的。

向後相容與隱式依賴

程式集定義檔案向後相容unity中現存的[預定義編譯系統](predefined compilation system)。也就是說,預定義程式集總是依賴於每個程式集定義檔案的程式集。這與unity中所有指令碼都依賴於所有和當前生成目標相容的預編譯程式集(外掛程式/.dll)的情況相似。

(圖 03)

圖3中的圖表展示了預定義程式集、程式集定義檔案以及預編譯程式集之間的依賴關係。

unity給予程式集定義檔案的優先順序要比[預定義編譯系統](compileorderfolders)高。

這意味著,任何來自程式集定義檔案資料夾內的預定義編譯的特殊資料夾名,都不會對編譯產生任何影響。unity只將它們視為常規資料夾。

強烈建議你對專案中的所有指令碼使用程式集定義檔案,或完全不使用。否則,沒有使用程式集定義檔案的指令碼會在每次程式集定義檔案重新編譯時也被重新編譯。這會減少你在專案中程式集定義檔案所帶來的好處。

api在unityeditor.compilation命名空間中,有乙個靜態的compilationpipeline類,你可用它獲取程式集定義檔案以及所有由unity生成的程式集的資訊。

檔案格式

程式集定義檔案都是json檔案。它們有以下這些字段:

欄位includeplatforms和 excludeplatforms不能在同乙個程式集定義檔案中使用。要獲取平台名,可使用:

compilationpipeline.getassemblydefinitionplatforms

示例mylibrary.asmdef

"name" : "mylibrary" ,

"references" : [ "utility" ],

"includeplatforms" : [ "android" , "ios" ]

"name" : "mylibrary2" ,

"references" : [ "utility" ],

"excludeplatforms" : [ "webgl" ]

相關資源

小結在等待unity 2017.3正式發布之前,你可以馬上測試這些特性。記得在公升級你的專案前先做備份。

Unity5 新功能解析 GI 全域性光

面積光的光源有形狀,是乙個矩形區域,有位置,有方向,方向是超矩形的一面,矩形的背面沒有光,並且隨距離衰減直到沒有。它用於模擬大量的光源和在一起的效果,如街道,但是因為計算複雜,所以只用於烘焙 構成 可實時更新的lightmap 可實時更新的光照探頭 light probe 可實時更新的cubemap...

Unity5 新功能解析 GI 全域性光

構成 可實時更新的lightmap 可實時更新的光照探頭 light probe 可實時更新的cubemap reflection probe 實時全域性光只實時計算物體之間的bounce light 物體之間來回反射的光 實時全域性光的實現 靜態物體之間的bounce light可以在預先計算階段...

小程式 實現列表 下拉重新整理功能(2)

下拉重新整理時,請求資料結束後,需要停止重新整理,如果不停止,會出現下面的bug 解決方式 因為 loadmore是非同步函式,我們可以讓它返回乙個promise物件,再執行then,呼叫wx.stoppulldownrefresh 停止重新整理操作 頁面相關事件處理函式 監聽使用者下拉動作 onp...