![]() |
VOOZH | about |
一. CSLIGHT 作者簡介
CSLight的作者是李劍英,一個有著美麗心靈的遊戲圈程式設計師,群中人稱李總,他的技術群是:【低端編程高端研究–223823428】。
二. CSLIGHT 為何而生
CSLight 最初出現的目的是為了解決Unity3D在IOS平台上的代碼熱更新的問題。 因為IOS平台上的代碼熱更新問題無法通過Mono Reflection機制來解決,故而只能引入腳本。
目前市面上的U3D腳本解決方案不多,被聽說過的大致有三種: CSLight UniLua SSharp,三者中CSLight的優點較為出眾:
故,CSLight是Unity3D腳本解決方案的充分可行之選。
三. CSLIGHT 框架說明
CSLight從宏觀上來看,只有兩個部分,一個是CSLight解釋器,另一個是CSLight框架。
對於剛接觸CSLight的新人來說,CSLight最重要的是CSLight框架→ CSLightFramework,這個輕量級的框架設計的很漂亮, 這裡先大致掃一眼該框架的結構和類圖:
這個框架簡潔優雅的實現了如下的兩個目的:
1. 開發者可以快速的上手開發,通過框架的封裝,使得開發者不需要關心底層解釋器的機制。
2. 藉助框架,一個C# 腳本文件,可以選擇以【原生模式(Mono虛擬機)】 或 【CSLight腳本模式(CSLight解釋器)】這兩種不同的執行模式來運行。
那麼為何需要兩種運行模式呢?這是為了方便在IDE中調試腳本代碼,因為只有在【原生模式】下運行才能借用IDE的斷點調試等功能。可等代碼穩定之後再切換到【CSLight腳本模式】。
參照上面的類結構圖:
【原生模式的執行】是通過CodeFile_Debug類 的包裝來達成的,其藉助了反射機制來做到本地化運行。
【CSLight腳本模式的執行】是通過 CodeFile_CLScript類 的包裝來達成的,其調用了CSLight底層解釋器的接口來做到解釋型的運行。
嗯,是時候需要一個典型的HelloWorld的例子,來進一步的理解這個框架了,這裡就用經常有人問到的【CSLight如何與NGUI交互】來作為例子。
其中的泛型T 就是【腳本】與【宿主環境】之間交互的關鍵所在,也正是上文強調過的【在宿主環境中的自定義接口】!
四. CSLIGHT 入門示例 — CSLIGHT 如何與 NGUI 進行交互
一個有意義的,同時又簡潔的示例不太好找。這裡隨便選的一個示例是:【如何用CSLight腳本來控制NGUI中一個元素的縮放。】
雖然這個例子本身沒有實際的意義,但通過這個例子搞懂框架的原理後,就可以很容易的做出一大堆有意義的事情來。
1. 新建一個Unity3D工程和場景,並把CSLight和CSLightFramework 這兩份工程代碼拷貝進去。
2. 新建一個NGUI_Root,並在 默認的Panel 節點下新建一個UISprite,然後隨便弄個圖片顯示。
此時的大概情形如下所示:
其中第一個接口:SetNGUIElementScale(float scale); 設置NGUI某個元素的縮放,這個就沒什麼好說的了,屆時CSLight腳本會調用這個宿主環境中的接口,傳入想要縮放的數值。
其中第二個接口:IScript對象的getter方法,這個也沒什麼好說的,這個接口是框架約定必須要實現的,因為CSLight腳本方法之間的互相調用需要用到這個。
5. 通過繼承框架中的 ScriptMgr類來創建自己的腳本管理器,代碼大致如下圖所示: