Unity3D熱更新全書-腳本(四) 用C#LightEvil搭建實際開發使用的腳本框架


C#LightEvil之前提供了很多和Unity結合的例子,都是采用把腳本文件放置在StreamingAssets中的方法。

這樣可以利用Unity的特性,放在這個目錄中的CS文件會被編譯器編譯,我們就利用C#編譯器來對我們的腳本進行驗證。

同時StreamingAssets中的文件又是直接隨項目發布的,所以可以直接以文件方式取出這些腳本文件編譯執行。

這是一個很巧妙的方式,但是用在實際項目中會有一些問題:

一、可能會讓程序員產生混淆,哪里是腳本,哪里是程序,傻傻分不清楚

二、主程序里會有一份用不到的代碼

三、直接編譯腳本文件略慢,在手機上比較明顯,尤其腳本文件多的時候。

 

面對這三個問題,我們一次就可以全解決

我們的模式如下

1.首先建立一個獨立的C#項目,里面只放腳本代碼。

2.然后當編譯這個項目的時候,會預編譯腳本代碼,並保存成一個二進制文件。

3.然后在主程序里直接加載這個二進制文件初始化腳本,繼續后面的事情。

GitHub(https://github.com/lightszero/CSLightStudio)上新的例子CSLightStudio\unity\FrameworkMaster 就是這個框架

由於比較抽象,讓我們來介紹一下

imageBin目錄是生成的最后效果,image有兩個主程序,兩個腳本二進制文件。

unity目錄里面是主程序,兩個場景分別導出了mode1 和 mode2

Mode1Script 和 Mode2Script是兩個腳本文件項目,他們是兩個ConsoleExe,從VS里面編譯執行就會把自己項目里的所有文件作為C#Light編譯

image

image

並且輸出到../bin/也就bin下面的那個 .csledll.bytes 文件

這樣就完成了腳本文件和Unity主項目的分開編譯,如果腳本有錯誤,這個控制台里會給出信息。

腳本編譯:通過VS 建立腳本項目並編譯驗證腳本且生成二進制文件。

程序編譯:通過Unity編譯輸出。

這樣

1.腳本和程序就完全隔離到了不同的項目里,腳本程序員寫腳本,主程序的程序員寫主程序,各司其職。

2.另外腳本程序也不會出現在主程序中

3.而且保存的二進制文件是詞法處理后的結果,在手機上閃電加載。

 

也許聰明的你現在已經發現了一個問題,主程序里面要對腳本調用的類型進行注冊,還有很多是自己編寫的類,腳本如果沒有這些信息是沒法進行編譯驗證的。

對,這個就要利用Unity的另一個特性,Unity的項目代碼用VS或者monodevelop編譯的話,會生成一個dll的,雖然unity不用他image

我們只要讓腳本項目引用這個DLL,並用和主程序一樣的方式初始化腳本引擎,就能得到和主程序一模一樣的腳本編譯環境進行處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM