1. 程式人生 > >全面解析Unity3D自動生成的指令碼工程檔案

全面解析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使用的,不包含"vs"的是產生給MonoDevelop用的。

應用中包含的指令碼語言

工程字首

工程字尾

C#

Assembly-CSharp

csproj

JavaScript

Assembly-UnityScript

unityproj

Boo

Assembly-Boo

booproj


如果工程中這3中指令碼都存在,那麼Unity3D將會生成3種字首型別的工程。

二. 對於每一種指令碼語言,根據指令碼放置的位置(其實也部分根據了指令碼的作用,比如編輯器擴充套件指令碼,就必須放在Editor資料夾下),Unity3D會生成4種字尾的工程。其中的firstPass就表示先編譯,Editor表示放在Editor資料夾下的指令碼。

下面以C#指令碼為例。如果工程中只有C#指令碼,不考慮為VS和MonoDevelop各自生成工程的差異性,我們可以得到4個工程檔案:

Assembly-CSharp-firstpass-vs.csproj

Assembly-CSharp-Editor-firstpass-vs.csproj

Assembly-CSharp-vs.csproj 

Assembly-CSharp-Editor-vs.csproj

(1) 所有在Standard Assets,Pro Standard Assets或者 Plugins資料夾中的指令碼會產生一個Assembly-CSharp-firstpass-vs.csproj

檔案,並且先編譯;

(2) 所有在Standard Assets/Editor, Pro Standard Assets/Editor 或這Plugins/Editor資料夾中的指令碼產生Assembly-CSharp-Editor-firstpass-vs.csproj工程,接著編譯;

(3) 所有在Assets/Editor外面的, 並且不在(1),(2)中的指令碼檔案(一般這些指令碼就是我們自己寫的非編輯器擴充套件的指令碼)會產生Assembly-CSharp-vs.csproj工程,被編譯;

(4) 所以在Assets/Editor中的指令碼產生一個Assembly-CSharp-Editor-vs.csproj工程,被編譯。

之所有這樣建立工程並按此順序編譯,也是因為DLL間存在的依賴關係所決定的。

好了,至此也說得比較清楚了,也不會因為見到那麼多的工程檔案而疑惑了。

最後問諸位一個小問題:

一個Unity3D的工程,最多可以產生多少個工程檔案?疑問

4*3*2 = 24個大笑