C#LightEvil之前提供了很多和Unity結合的例子,都是采用把腳本文件放置在StreamingAssets中的方法。
這樣可以利用Unity的特性,放在這個目錄中的CS文件會被編譯器編譯,我們就利用C#編譯器來對我們的腳本進行驗證。
同時StreamingAssets中的文件又是直接隨項目發布的,所以可以直接以文件方式取出這些腳本文件編譯執行。
這是一個很巧妙的方式,但是用在實際項目中會有一些問題:
一、可能會讓程序員產生混淆,哪里是腳本,哪里是程序,傻傻分不清楚
二、主程序里會有一份用不到的代碼
三、直接編譯腳本文件略慢,在手機上比較明顯,尤其腳本文件多的時候。
面對這三個問題,我們一次就可以全解決
我們的模式如下
1.首先建立一個獨立的C#項目,里面只放腳本代碼。
2.然后當編譯這個項目的時候,會預編譯腳本代碼,並保存成一個二進制文件。
3.然后在主程序里直接加載這個二進制文件初始化腳本,繼續后面的事情。
GitHub(https://github.com/lightszero/CSLightStudio)上新的例子CSLightStudio\unity\FrameworkMaster 就是這個框架
由於比較抽象,讓我們來介紹一下
Bin目錄是生成的最后效果,
有兩個主程序,兩個腳本二進制文件。
unity目錄里面是主程序,兩個場景分別導出了mode1 和 mode2
Mode1Script 和 Mode2Script是兩個腳本文件項目,他們是兩個ConsoleExe,從VS里面編譯執行就會把自己項目里的所有文件作為C#Light編譯
並且輸出到../bin/也就bin下面的那個 .csledll.bytes 文件
這樣就完成了腳本文件和Unity主項目的分開編譯,如果腳本有錯誤,這個控制台里會給出信息。
腳本編譯:通過VS 建立腳本項目並編譯驗證腳本且生成二進制文件。
程序編譯:通過Unity編譯輸出。
這樣
1.腳本和程序就完全隔離到了不同的項目里,腳本程序員寫腳本,主程序的程序員寫主程序,各司其職。
2.另外腳本程序也不會出現在主程序中
3.而且保存的二進制文件是詞法處理后的結果,在手機上閃電加載。
也許聰明的你現在已經發現了一個問題,主程序里面要對腳本調用的類型進行注冊,還有很多是自己編寫的類,腳本如果沒有這些信息是沒法進行編譯驗證的。
對,這個就要利用Unity的另一個特性,Unity的項目代碼用VS或者monodevelop編譯的話,會生成一個dll的,雖然unity不用他![]()
我們只要讓腳本項目引用這個DLL,並用和主程序一樣的方式初始化腳本引擎,就能得到和主程序一模一樣的腳本編譯環境進行處理。


