【轉載】全面解析Unity3D自動生成的指令碼工程檔案
我們在Unity3D開發的時候,經常會看到它會產生不少固定命名工程檔案,諸如:
Assembly-CSharp-vs.csproj
Assembly-CSharp-firstpass-vs.csproj
Assembly-CSharp-Editor-vs.csproj
Assembly-CSharp-Editor-firstpass-vs.csproj
看得不少人云裡霧裡的。那麼,這些工程是如何產生的呢?各自的作用是什麼?下面就來逐一解析。
一. 首先從指令碼語言型別來看,Unity3D支援3種指令碼語言,都會被編譯成CLI的DLL
如果應用中含有C#指令碼,那麼Unity3D會產生以Assembly-CSharp為字首的工程,名字中包含"vs的"是產生給Visual Studio使用的。
應用中包含的指令碼語言 | 工程字首 | 工程字尾 |
C# | Assembly-CSharp | csproj |
JavaScript | Assembly-UnityScript | unityproj |
Boo | Assembly-Boo | booproj |
(不過現在Unity好像只支援C#指令碼語言了,所以應該只用關心第一項就可以了)
如果工程中這3中指令碼都存在,那麼Unity3D將會生成3種字首型別的工程。
二. 對於每一種指令碼語言,根據指令碼放置的位置(其實也部分根據了指令碼的作用,比如編輯器擴充套件指令碼,就必須放在Editor資料夾下),Unity3D會生成4種字尾的工程。其中的firstPass就表示先編譯,Editor表示放在Editor資料夾下的指令碼。
下面以C#指令碼為例。如果工程中有C#指令碼,我們可以得到4個工程檔案:
Assembly-CSharp-vs.csproj
Assembly-CSharp-firstpass-vs.csproj
Assembly-CSharp-Editor-vs.csproj
Assembly-CSharp-Editor-firstpass-vs.csproj
(1) 所有在Standard Assets,Pro Standard Assets(2018後面的版本好像沒有標準資源了)或者 Plugins資料夾中的指令碼會產生一個Assembly-CSharp-firstpass-vs.csproj工程。也就是說,如果你的專案Asset中存在Plugins資料夾(名字必須對的上,沒有可以自己建立),並且資料夾內有C#指令碼,那麼專案會自動生成一個Assembly-CSharp-firstpass-vs.csproj
比如現在我的Plugins下面只有一個指令碼,開啟vs後項目還是會自動生成firstpass
(2) 所有在Assets/Editor中的指令碼產生一個Assembly-CSharp-Editor-vs.csproj工程。現在我又在Asset中建立了Editor資料夾,在其中建立了一個指令碼EditorTest.cs,開啟後發現專案中又多了個工程檔案。
(3) 所有在Standard Assets/Editor, Pro Standard Assets/Editor 或這Plugins/Editor資料夾中的指令碼產生Assembly-CSharp-Editor-firstpass-vs.csproj工程。同理,Plugins資料夾中如果也有一個Editor,建立指令碼後就會出現該工程。
(4) 所有在Assets/Editor外面的, 並且不在(1),(2)中的指令碼檔案(一般這些指令碼就是我們自己寫的非編輯器擴充套件的指令碼)會產生Assembly-CSharp-vs.csproj工程。這個好說,如果一個空專案建立,然後在其他的地方去建立一些指令碼,比如自己建立的Scripts檔案等,就會只有這個工程。
三. 對於這些自動建立的工程檔案是有執行順序的,標有firstpass中的指令碼執行順序永遠高於沒有firstpass的
我做了個測試,在空場景中放了個空物體去掛載分別在Plugins和Plugins以外任意資料夾建立的兩個指令碼去列印日誌看執行順序
最終的執行順序:
所以同理,Editor環境下的兩個工程執行順序也同樣是firstpass優先
轉載自:https://blog.csdn.net/jjiss318/article/details/7632041
自己稍微加了點內容