KSFramework是一個Unity 5 Asset Bundle開發(fā)框架和工具集昼榛,專注于運行時熱重載境肾,使用了SLua作為腳本引擎剔难。
https://github.com/mr-kelly/KSFramework
KSFramework是一個整合KEngine、SLua和一些開發(fā)組件組成的全功能Unity 5開發(fā)框架奥喻,適合有一定規(guī)模的團(tuán)隊使用偶宫。
熱重載是KSFramework的開發(fā)重點——在不重啟游戲的前提下,重載代碼环鲤、配置表可立刻看到修改效果纯趋,最大限度的提升開發(fā)、調(diào)試的速度冷离,并且在運營階段方便的進(jìn)行產(chǎn)品熱更新吵冒。
看看Demo!
雙擊打開Assets/Game.unity場景西剥,點擊播放痹栖。
這時候KSFramework的默認(rèn)Demo開始,做了這些事情:
- 基礎(chǔ)模塊的啟動
- Lua模塊的啟動
- 嘗試讀取并打印Excel表格GameConfig.xlsx內(nèi)容
- 加載UI界面Login
- 執(zhí)行UI界面Login的Lua腳本
- Lua腳本綁定UI控件瞭空、設(shè)置UI控件
- Lua腳本讀取并打印Excel表格GameConfig.xlsx內(nèi)容
總而言之揪阿,這個Demo囊括了KSFramework中的幾個核心模塊的使用:
- KEngine中的Setting模塊的使用
- KEngine中的UI的資源加載
- SLua腳本引擎與UI的聯(lián)合
接下來,將模仿這個Demo咆畏,創(chuàng)建/加載一個新的UI界面南捂、創(chuàng)建/讀取一個新的配置表格。
嘗試做一個公告界面Billboard
接下來旧找,我們將創(chuàng)建一個UI公告牌(Billboard)溺健,使用Lua腳本,并從配置表讀取公告內(nèi)容钮蛛。
創(chuàng)建UI資源
加載UI界面
好了,Billboard界面創(chuàng)建好了柜候,也導(dǎo)出成了AssetBundle搞动。
接下來,我們通過代碼打開界面渣刷。
在OnFinishInitModules函數(shù)的末端鹦肿,加上這樣的一句:
// 開始加載我們的公告界面!
UIModule.Instance.OpenWindow("Billboard");
完成辅柴。 打開場景Assets/Game.unity箩溃,點擊播放按鈕:
[我們的UI通過AssetBundle打開了涣旨,彈出提示找不到UI Lua腳本歪架,接下來我們創(chuàng)建Lua腳本吧。
創(chuàng)建Lua腳本
local UIBase = import("KSFramework/UIBase")
local UIBillboard = {}
extends(UIBillboard, UIBase)
function UIBillboard:OnInit(controller)
self.Controller = controller
self.TitleLabel = self:GetUIText('Title')
self.ContentLabel = self:GetUIText('Content')
end
function UIBillboard:OnOpen()
self.TitleLabel.text = "This is a title"
self.ContentLabel.text = "Here is content!"
end
return UIBillboard
這段lua中霹陡,創(chuàng)建了一個Table叫UIBillboard和蚪,這個table必須有OnInit(controller)函數(shù)。它通過代碼設(shè)置了UI中的文字烹棉。
好了攒霹,接下來,我們要為策劃準(zhǔn)備配置表了浆洗。
創(chuàng)建配置表
打開Product/SettingSource目錄催束,復(fù)制一份StringsTable.xlsx,并改名叫Billboard.xlsx吧
用Excel打開我們新的Billboard.xlsx辅髓,編輯我們的公告泣崩。我們大概定一下需求,我們假設(shè)寫入3條公告洛口,每次打開公告隨機(jī)顯示其中一條。每個公告凯沪,我們給它一個英文ID第焰,一列中文標(biāo)題,一列中文內(nèi)容妨马。
Excel表修改如下:
公告界面完成了派歌。我們創(chuàng)建了一個UI弯囊、寫了C#和Lua代碼加載它痰哨、然后創(chuàng)建了一張配置表,再從Lua讀取配置表匾嘱,設(shè)置UI的顯示作谭。
玩玩熱重載
熱重載Lua
接著我們剛才運行的Game.unity。 我們嘗試一下對Lua熱重載:在不重啟游戲的情況奄毡,快速重載Lua代碼折欠,方便程序調(diào)試。
我們可以從菜單執(zhí)行熱重載并重新打開UI界面锐秦,或者使用快捷鍵Ctrl+Alt+Shift+R。
由于我們的Lua腳本中盗忱,每次執(zhí)行隨機(jī)獲取一條公告酱床。因此可以看到公告內(nèi)容在不停的變動著。
熱重載的實現(xiàn)趟佃,主要依賴于每個lua腳本的最后一行——return Table扇谣;C#層在執(zhí)行完Lua腳本后,會把這個返回的Table緩存起來闲昭,每次需要使用table時罐寨,直接從緩存拿;而熱重載序矩,實際就是把這個緩存table刪掉鸯绿,這樣當(dāng)需要用到這個table時,就會重新執(zhí)行Lua文件簸淀,來獲取Table瓶蝴,這樣就達(dá)到了熱重載得目的。
熱重載Excel表格
我們保持運行剛剛的Game.unity租幕,不要停止掉舷手。這時候我們?nèi)バ薷腅xcel表格。
保存后劲绪,回到Unity男窟,提示表格有改動。
重載Lua蝎宇,我們的新修改的配置表內(nèi)容生效了。
至此祷安,我們的Lua和配置表的改動姥芥,都可以在不重啟、不重新轉(zhuǎn)菊花的情況下快速修改汇鞭。