天天看點

ToLua SimpleFramework NGUI/UGUI基礎知識[1]ToLua SimpleFramework NGUI/UGUI基礎知識[1]

ToLua SimpleFramework NGUI/UGUI基礎知識[1]

原文位址:http://doc.ulua.org/default.asp?cateID=4

視訊位址:http://pan.baidu.com/s/1gd8fG4N

這個基礎文章比較難寫,不是因為多麼難,而是因為大家的水準參差不齊,基礎線難以恒定。有的人已經是Unity大牛,看下架構的使用方式即可,有的人用U3D一兩年了,它不需要知道怎麼生成包,而有的是第一天才開始學U3D,甚至連Unity導入插件包不能有中文路徑都不知道。

我們不可能從頭教你怎麼去學Unity,我們也沒空,ULUA的使用人群比其他的熱更方案門檻已經低得多,不謙虛的說,得益于群裡管理者跟我長時間的業餘努力,才做到的。是以ULUA的使用人群的設定範圍大體是:

(1)至少會用Unity開發程式,基本的Unity的知識要懂。

(2)知道怎麼用Unity生成APK/IPA到移動裝置上。

(3)知道ULUA的c#與c、c++等原生插件通訊原理。

如果上面都不懂,我也不能說讓你哪兒涼快哪兒呆着去,至少你得自己百度明白了這些,也不要在群裡@群主,我也沒空去普及這些東西,作為一個程式員,這些基本的技能都要有,否則還是趁早改行吧。

這個文章會一直持續更新,直到所有符合以上3點條件的同學都能不需要問我什麼關鍵點的時候為止。

架構的定位前期不是一個專業性的遊戲開發架構,我在群裡多次說過,當時的SimpleFramework隻是從我前創業遊戲裡面剝離出來的部分代碼拼湊而成,目的僅僅是為了示範ULUA到底怎麼做熱更方案,這一點在去年聖典的文章上已經說過了“很多人不知道怎麼用ULUA,是以搞了個示範DEMO”。到後來,這個初衷發生變化的原因是,突然有一天發現很多人已經基于這個DEMO去做遊戲了,這個說實話這個出乎我的意料。

為了适應大家的使用習慣,在群裡我也花時間調研大家使用的開發遊戲的架構方式等,後來得出使用PureMVC的同學大多數,為了友善大家直接上手,我也就用相對專業化的方式改造架構,整理、清除不需要的部分等,變成現在的樣子。

先看看Unity工程外層兩個重要的目錄LuaEncoder跟Server是幹嘛的:

ToLua SimpleFramework NGUI/UGUI基礎知識[1]ToLua SimpleFramework NGUI/UGUI基礎知識[1]
ToLua SimpleFramework NGUI/UGUI基礎知識[1]ToLua SimpleFramework NGUI/UGUI基礎知識[1]
ToLua SimpleFramework NGUI/UGUI基礎知識[1]ToLua SimpleFramework NGUI/UGUI基礎知識[1]
ToLua SimpleFramework NGUI/UGUI基礎知識[1]ToLua SimpleFramework NGUI/UGUI基礎知識[1]

上面的圖是目前SimpleFramework的基本目錄結構,而且這個結構短時間内不會發生太多的變化。

我們可以簡單介紹下每個目錄的用途。

Examples :架構自帶的Demo例子,如果隻需要架構的同學,裡面的資源可以删除掉。去“疑難解答”裡面檢視方法。

 ---Builds:裡面都是一些NGUI定義的圖集啊、Prefab等資源。用于生成assetbundle而準備的資源。

 ---Editor:裡面是例子用到的一個新手引導步驟示範的編輯器腳本。

 ---Editor Default Resource:目錄是新手引導步驟對話框用的的圖檔資源。

 ---Rsources:例子裡面用于示範的一個内建的GUI容器的Prefab。

 ---Scenes:裡面一個login場景檔案,另一個是cstolua自帶的性能測試場景檔案。(不同版本稍微有些不一樣)

 ---Textures:裡面是Buidls目錄裡面圖集的原圖檔案。

Lua:架構自帶的Lua源碼目錄,使用者自定義的Lua腳本也就是放在這裡面,最後打包的時候,打包腳本會将其按目錄結構生成到StreaminAssets目錄裡面去,然後在将其上傳到遊戲的Web伺服器上面,用于準備被每個遊戲用戶端下載下傳更新他們本地的Lua腳本。達到熱更目的。

 ---3rd:裡面是第三方的一些插件lua、執行個體源碼檔案,比如:cjson、pbc、pblua、sproto等。

 ---Common:公用的lua檔案目錄,如define.lua檔案,一些變量聲明,全局配置等,functions.lua常用函數庫,通訊的protocal.lua協定檔案。

 ---Controller:控制器目錄,它不依賴于某一個Lua面闆,它是獨立存活在Luavm中的一個操作類,操作資料、控制台顯示而已。

 ---Logic:目錄裡面存放的是一些管理器類,比如GameManager遊戲管理器、NetworkManager網絡管理器,如果你有新的管理器可以放到裡面。

 ---System:這個目錄是cstolua的系統目錄,裡面存放都是一些常用的lua類,為了優化lua調用速度,用lua重寫的unity常用類。

 ---View:這是面闆的視圖層,裡面都是一些被Unity調用的面闆的變量,走的是Unity GameObject的生命周期的事件調用。

Plugins:ulua底層庫所在的目錄,裡面存放的是不同平台的底層庫,之是以ulua效率高,就是它是純c的lua虛拟機,而不是c#解釋型的。

 ---Andriod:安卓lua虛拟機底層庫,裡面分為armv7-a與Intel x86平台。

 ---iOS:裡面就是蘋果lua虛拟機底層庫。

 ---ulua.bundle:裡面是Mac機器的底層庫。

 ---x86:裡面是Win32/Linux32位機器的lua虛拟機底層庫。

 ---x86_64:裡面是Win64/Linux64位機器的lua虛拟機底層庫。

Scripts:架構的C#腳本層,之是以這個目錄跟lua目錄都放在最外層,為了讓使用者一眼都能找到,明白是什麼。

 ---Common:架構的公用定義類。BehaviourBase(行為基類)、GlobalGenerator全局構造器、與luavm通知unity遊戲對象的“LuaBehaviour”橋類。

 ---ConstDefine:常量定義目錄,AppConst(應用常量)ManagerName(管理器名稱)NotiConst(通知常量,用于mvc消息通知)。

 ---Controller:控制器目錄,分為Boostraps啟動控制器,跟Command常用邏輯控制器。

 ---Framework:經過修改過的PureMVC的架構檔案。

 ---Manager:Unity提供基礎功能的管理器類,音樂、面闆、線程、資源等衆多管理器。

 ---Module:PureMVC的子產品層,目前裡面将Socket作為一個子產品代理放到裡面了。

 ---Network:網絡的常用輔助類,ByteBuffer位元組操作封裝類,網絡協定類,轉換器類。

 ---Utility:常用工具類。

 ---View:C#用的PureMVC的視圖層。

uLua:ulua/cstolua的核心目錄,裡面還有經過我們修繕後ulua的基礎使用例子,使用者初學者最佳。

 ---Core:顧名思義,ulua的核心目錄,所有c#與lua的互動都是通過它進行排程的。

 ---Docs:ulua自帶的文檔目錄,因為ulua基于LuaInterface,是以這裡面就是它的文檔。

 ---Editor:這是供cstolua去反射定義Wrap檔案清單的工具類目錄。

 ---Examples:經過我們修改增加後ulua自帶的例子。

 ---Source:這個是cstolua的核心目錄,裡面有Base核心目錄,與動态生成用于存放LuaWrap類的緩存目錄。

上面的目錄結構,就介紹到此為止了。既然是熱更新遊戲架構,接下來我們說下怎麼做熱更?

其實做熱更的步驟不麻煩,因為Unity的c#類部分熱更不了,那我們需要熱更的就隻有Lua代碼部分了,當我們寫完遊戲測試OK了,就可以上線營運,并且在Web伺服器上面部署最新的版本資源檔案,我們就可以将Lua的代碼編碼後上傳到Web伺服器上面去,當遊戲用戶端啟動的時候,它會啟動解包流程、解包的資源一般都是當時做包時候的資源,到後面我嗎修改以後,它内部的資源可能已經不是最新的了,但是大部分可能是新的,隻有少部分需要更新,那緊接着就啟動更新流程,從Web伺服器上面的資源配置清單裡面,通過MD5/CRC比較查詢到最新的資源,下載下傳更新本地的檔案,達到更新最新版的目的,遊戲順利啟動。

上面基本上就是熱更的指導思想了,SimpleFramework架構也基本上以此思路在運作的,如果還不清楚的話,可以看下圖:

ToLua SimpleFramework NGUI/UGUI基礎知識[1]ToLua SimpleFramework NGUI/UGUI基礎知識[1]
ToLua SimpleFramework NGUI/UGUI基礎知識[1]ToLua SimpleFramework NGUI/UGUI基礎知識[1]
ToLua SimpleFramework NGUI/UGUI基礎知識[1]ToLua SimpleFramework NGUI/UGUI基礎知識[1]
ToLua SimpleFramework NGUI/UGUI基礎知識[1]ToLua SimpleFramework NGUI/UGUI基礎知識[1]

繼續閱讀