接下來我會運用熱更新的機制,逐步制作一些例子來闡釋腳本系統如何和Unity結合。
腳本不限於使用C#Lite,但是C#Lite會有一些便利之處,請往下看。
結合機制也不限於這一種,但是C#Lite的設計比較傾向於,不讓腳本管理狀態,不讓腳本循環執行,每一段腳本就相當於一個函數。
所以C#Lite不會考慮從腳本內定義新的類型和函數這件事,如果要互相調用,可以讓腳本內直接調用另一個腳本。
今天帶來的是一個腳本系統控制的界面,這個界面完全是用腳本代碼產生的,這個界面系統不用腳本也可以使用,大家一看就知道是用OnGUI制作的。
首先是初始化界面
我們通過這樣一個函數建立了如上界面,先不用關心界面系統,只是讓腳本不用頻繁調用,做了一個樹結構把界面元素狀態起來。
並且指定了按鈕一按下時執行腳本 btn01_click.cls腳本,按鈕二按下時執行腳本btn02_click.
在Start中調用codeInit 這個界面就出現了
現在還是程序的寫法,接下來,見證奇跡的時刻來了。
只要把codeInit函數體內的內容完全復制到腳本文件中,就是腳本了
可以看到在Unity里作為一個TextAsset存在,這就是熱更新的本質了,邏輯在資源里,不是在代碼里。
C#Lite比別的腳本語言更適合Unity的是,你完全可以把邏輯在程序里寫好,再搬運到腳本中,當然目前C#Lite還沒做到c#語法100%兼容。
這里有兩個問題要檢討一下:
一、我用了一個特別的寫法
CLUI_Node_Label label =(CLUI_Node_Label)objlabel;
而沒有使用c#中更適合的 as 表達式,就是因為C#Lite並沒有支持 as 表達式,只支持了對一個變量進行類型轉換。
另外C#Lite的數字識別不能識別0f,只能識別0。
這兩處已經加入buglist,積極改進中。
二、C#Lite的錯誤提示也不是太友好,只有幾種很簡單的提示,log不詳細,不便於識別問題,也在積極改進中。
最終目標是讓腳本和代碼可以非常輕易的互換,即使出了錯,能詳細的提示清楚哪里出錯,如何改。
好,接下來就讓腳本來處理界面,讓代碼下崗
見證奇跡的時刻
簡單,把函數注釋掉,直接執行一個腳本來解決問題。
運行場景,得到和代碼執行完美一致的效果。