KSFramework:Unity3D開發框架快速入門


KSFramework知識

https://github.com/mr-kelly/KSFramework

KSFramework是一個整合KEngine、SLua和一些開發組件組成的全功能Unity 5開發框架,適合有一定規模的團隊使用。

熱重載是KSFramework的開發重點——在不重啟游戲的前提下,重載代碼、配置表可立刻看到修改效果,最大限度的提升開發、調試的速度,並且在運營階段方便的進行產品熱更新。

看看Demo!

雙擊打開Assets/Game.unity場景,點擊播放。

1835687-b5116d08675b5b0d

圖:開始Game.unity后的日志輸出

KSFramework做了這些事

這時候KSFramework的默認Demo開始,做了這些事情:

  • 基礎模塊的啟動
  • Lua模塊的啟動
  • 嘗試讀取並打印Excel表格GameConfig.xlsx內容
  • 加載UI界面Login
  • 執行UI界面Login的Lua腳本
  • Lua腳本綁定UI控件、設置UI控件
  • Lua腳本讀取並打印Excel表格GameConfig.xlsx內容

囊括KSFramework核心模塊的使用

總而言之,這個Demo囊括了KSFramework中的幾個核心模塊的使用:

  • KEngine中的Setting模塊的使用
  • KEngine中的UI的資源加載
  • SLua腳本引擎與UI的聯合

接下來,將模仿這個Demo,創建/加載一個新的UI界面、創建/讀取一個新的配置表格。

嘗試做一個公告界面Billboard

接下來,我們將創建一個UI公告牌(Billboard),使用Lua腳本,並從配置表讀取公告內容。

1. 創建UI資源

1835687-78c33d2dbb2d34fb

圖:創建New Scene

 

Create UI

1835687-25dffd06037757b8

圖:KEngineUI - Create UI 創建UI布局

 

1835687-07a7a61c381e89b4

圖:點擊Create UI后,默認隨機名字,把UI名字修改為Billboard

 

1835687-b3737213af89a494

圖:修改UI名字為Billboard,UI界面右邊帶有黃色UI標識

 

1835687-25819cee7bfd0b98

圖:編輯一下UI場景,一個背景Image,兩個Label

 

1835687-6d4dae99358884d1

保存一下場景,保存到Assets/BundleEditing/UI/Billboard.unity

 

Export UI To Assetbundle

1835687-ae25ea2b174732cd

圖:導出 — 打包AssetBundle,快捷鍵Ctrl+Alt+E

2. 加載UI界面

好了,Billboard界面創建好了,也導出成了AssetBundle。

顯示UI面板(OpenWindow方式)

接下來,我們通過代碼打開界面。

1835687-f6ff1f85b4c72c0e

代碼示例

編輯 Assets/Code/Game.cs

OnFinishInitModules 函數的末端,加上這樣的一句:

// 開始加載我們的公告界面!
UIModule.Instance.OpenWindow("Billboard");

完成並保存。

運行效果

打開場景 Assets/Game.unity,點擊播放按鈕:

1835687-e7f38d6b85378bc3

我們的UI通過AssetBundle打開了,彈出提示找不到UI Lua腳本,接下來我們創建Lua腳本吧

3. 創建Lua腳本

1835687-e2a07506af3ba947

圖:在目錄 Product/Lua/UI 中新建一個 lua文件

Lua腳本示例

1835687-fb72415afd39a73a

寫一段Lua代碼:UIBillboard的執行邏輯

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中,創建了一個Table叫UIBillboard,這個table必須有OnInit(controller)函數。它通過代碼設置了UI中的文字。

好了,接下來,我們要為策划准備配置表了。

4. 創建配置表

打開 Product/SettingSource 目錄,復制一份 StringsTable.xlsx,並改名叫 Billboard.xlsx

1835687-b854b326a8046966

公告需求

用Excel打開我們新的 Billboard.xlsx,編輯我們的公告。

我們大概定一下需求,我們假設寫入3條公告,每次打開公告隨機顯示其中一條。每個公告,我們給它一個英文ID,一列中文標題,一列中文內容。

配置公告Excel

Excel表修改如下: (增加公告內容 )

1835687-78cbcf4e26f0da94

 

Unity自動監測Excel變動

1835687-037c1801a8f40556

圖:回到Unity,監測到Excel變動。點擊OK。

 

自動生成配置表代碼

1835687-d83b8167e76faddd

上一步監測到變動,只編譯Excel表,手動執行一些重新編譯,並生成配置表代碼

 

tab生成的BillboardSettings類

1835687-b254b8c1f1b64224

圖:這時候,打開AppSettings.cs代碼文件,我們可以發現,已經生成名叫BillboardSettings的類了

 

生成SLua的靜態代碼

1835687-a9bdf5d0c5c410db

因為我們要在Lua使用BillboardSettings讀取配置表,這里需要重新生成一下SLua的靜態代碼

 

修改Lua隨機讀取一條公告

1835687-1bb462980f923226

接下來修改Lua代碼,隨機讀取一條公告,並設置Content、Title

 

公告內容隨機顯示

1835687-9603f6d7c2f1b679

圖:運行播放 Game.unity,我們的公告界面完成了

公告界面完成了。我們創建了一個UI、寫了C#和Lua代碼加載它、然后創建了一張配置表,再從Lua讀取配置表,設置UI的顯示。

 

玩玩熱重載

熱重載Lua

接着我們剛才運行的 Game.unity 。 我們嘗試一下對Lua熱重載:在不重啟游戲的情況,快速重載Lua代碼,方便程序調試

 

1835687-efd4bb9bf9496776

圖:菜單 KSFramework –> UI –> Reload+ReOpen:熱重載Lua腳本,並重新打開目前處在打開狀態的UI界面

 

我們可以從菜單執行熱重載並重新打開UI界面,或者使用快捷鍵 Ctrl+Alt+Shift+R
由於我們的Lua腳本中,每次執行隨機獲取一條公告。因此可以看到公告內容在不停的變動着。

熱重載的實現原理

熱重載的實現,主要依賴於每個lua腳本的最后一行——return Table;C#層在執行完Lua腳本后,會把這個返回的Table緩存起來,每次需要使用table時,直接從緩存拿;而熱重載,實際就是把這個緩存table刪掉,這樣當需要用到這個table時,就會重新執行Lua文件,來獲取Table,這樣就達到了熱重載得目的。

 

熱重載Excel表格

我們保持運行剛剛的 Game.unity,不要停止掉。這時候我們去修改Excel表格。

 

1835687-a5aa9b523ad7c4b6

圖:修改Excel表格

 

修改配置表並重載

保存后,回到Unity,提示表格有改動。

1835687-790e24f195b85f44

圖:發現表格有變動,點擊OK編譯表

 

1835687-3e3bf9af96089576

圖:從菜單中心一下重載配置表格吧

 

重載效果

1835687-2622e03d3d1c7ea9

圖:Ctrl+Alt+Shift+R刷新Lua

 

重載Lua,我們的新修改的配置表內容生效了。

至此,我們的Lua和配置表的改動,都可以在不重啟、不重新轉菊花的情況下快速修改。

版權說明

文/公的Kelly[mr-kelly](簡書作者)
原文鏈接:http://www.jianshu.com/p/ccb491ed4260
著作權歸作者所有,轉載請聯系作者獲得授權。

KSFramework系列

github地址:https://github.com/mr-kelly/KSFramework

歡迎大家到 github提issues

 

KSFramework(集成U3D熱重載)README

KSFramework:Unity3D開發框架快速入門


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM