1. 程式人生 > >Unity+Tolua框架實現棋牌遊戲:Unity入門(一)

Unity+Tolua框架實現棋牌遊戲:Unity入門(一)

一、準備階段

1、首先下載Unity安裝包,然後安裝即可,如果開發手遊的話需要安裝Android和IOS的support包。

3、解壓專案LuaFramework_UGUI,用Unity開啟,選擇LuaFramework-->Build xxx Resource,執行即可

二、框架說明

以上為專案結構圖。

1、Editor:主要有兩個檔案。CustomSettings主要是將C#的Class和Action等委託註冊,生成Wrap檔案,供Lua呼叫,實現Lua和C#的互動;Packager主要用來生成Assetbundle包,需要在其中新增好打包檔名、檔案格式、檔案路徑等配置。

2、Examples:框架例項,存放例項的預設和資源,Packager中設定的打包路徑就在這裡。

3、Lua:3rd是一些第三方庫和例子;Common是一些全域性屬性、方法的定義;Controller是預設Panel的邏輯程式碼;Logic是全域性的管理檔案;View是預設Panel的UI元件和定義和獲取,供Controller的使用。Lua資料夾下也有一些檔案,Lua入口檔案Main.lua和event廣播相關檔案(不過這個不推薦用,不好維護吧)

4、Resources:存防音視訊等資源

5、Scenes:場景(根據這個框架,一個專案有一個場景就可以了,之後不同的頁面僅是更換預設Panel就可以了)

6、Scripts:C#程式碼,主要實現AB包的載入和下載、資源的載入等

7、ToLua:蒙哥寫的ToLua熱更新框架程式碼,用於C#和Lua互動

8、Plugins:外掛,一般存放第三方庫,比如安卓和IOS的庫,微信登陸、定位等第三方庫。

9、StreamingAssets:Build xxx Resource生成的AB都在這裡,這裡的檔案就是我們可以熱更新的檔案。只要將這部分檔案放置到伺服器讓客戶端下載更新即可。

三、通過以上各資料夾的說明,我們瞭解了框架的組成。現在大致說下框架的執行過程:

1、首先執行專案,顯示的是Scene的內容,這部分是固定的,不能熱更,主要顯示專案名稱或公司名稱吧

2、執行Scene時,同時會執行掛載在Scene上的指令碼

3、指令碼執行開始會先將AB包複製到專案目錄下,然後從伺服器下載files.txt(AB包目錄,含有AB包名字及其MD5)

4、根據MD5判斷該AB包是否需要更新,是則從伺服器下載AB包替換到專案目錄下,這就是熱更新。

5、當複製完最新的AB包後,開始建立Lua虛擬機器,開啟Lua入口Main.lua,然後執行Game.lua進入應用開始介面

6、進入應用開始介面(如登陸或大廳),這時主要就是預設Panel的更換,主要執行Lua程式碼(當然會跟C#互動)

7、預設Panel的建立是在Controller的xxxCtrl.lua中呼叫的,預設的命名和lua檔案的命名是有固定格式的,參考PanelMannager,都是以xxxPanel結束的,然後在Lua/View下建立對應的xxxPanel.lua和在Lua/Controller下建立對應的xxxCtrl.lua。通過學習Lua程式設計我們知道,要在一個lua檔案中使用另一個lua檔案是需要先require的,框架在這方面進行統一的require,當然你也可以分開,有時候分開相對來說更好,這個主要根據自己的情況決定,框架統一在define.lua和CtrlManager.lua中引用,define.lua主要是所列xxxPanel.lua和xxxCtrl.lua的key,然後在Game.lua中統一引用xxxPanel.lua,這是使用須知的。

8、在Lua中使用C#或者Unity的類是需要完整引用的(namespace+className)、AddComponent(typeof(namespace+className))動態掛載指令碼需要注意下,當然如果是Unity的元件可以這樣寫:AddComponent("Button"),這些寫法都需要先將這些類在CustomSettings中註冊並Build出Wrap檔案才能用。

四、StreamingAssets伺服器配置

通過以上的配置可以將本機當作伺服器實現熱更功能,要使用熱更功能需要在Scripts/ConstDefine/AppConst中修改其中的配置。

1、UpdateMode:true表示啟動熱更模式,需要配置WebUrl(AB包的伺服器地址)

2、LuaBundleMode:true表示將資源和lua程式碼打包成AB包,false主要用於除錯,避免每次修改lua程式碼都要打包

3、WebUrl:AB包的伺服器地址

4、每次修改C#程式碼都需要重新編譯Wrap檔案