? ? ? 游戲,當(dāng)然要熱更哦,否則資源程序變動(dòng)時(shí),重新下載安裝包,費(fèi)時(shí)費(fèi)事,用戶流量流失。當(dāng)然我們Unity開發(fā)引擎來(lái)講解,用的是騰訊的XLua,在這要感謝一下騰訊做出的貢獻(xiàn)。話不多說,開始擼代碼。
? ? ? ?熱更新,我們更的是資源,和邏輯代碼,所以有了所謂的資源熱更,代碼熱更。資源的話,我們一般會(huì)打成ab包,放在服務(wù)器,更新下來(lái),這一塊在我的文章MD5校驗(yàn)和資源代碼熱更有講到,可以去看一下。但代碼熱更,我們就會(huì)用到lua去開發(fā)邏輯代碼,那么Lua腳本怎么執(zhí)行呢!成為阻力,給大家講解一下。我們Unity中,可以執(zhí)行理解為執(zhí)行的都是組件,C#代碼可以當(dāng)成組件,掛載在物體上,我們就以這個(gè)為思路,我們把Lua腳本也當(dāng)成一個(gè)組件,AddComponent加載到物體上,Lua腳本是無(wú)法這樣掛載到物體上的,這時(shí)我們就需要一個(gè)中介,事先寫好的通用組件C#代碼來(lái)連接我們的Lua腳本,接下來(lái)看代碼
?? ? ?我們建一個(gè)LuaComponent.CS的腳本,如下

我們能用到的函數(shù)模板聲明,如luaStart 相當(dāng)于我們C#中的Start.

這個(gè)方法,看到了GameObject,LuaTable,把聲明的lua腳本加載到物體上


初始化lua函數(shù)模板




C#函數(shù)和lua函數(shù)映射。
這個(gè)通用中介腳本寫好了,先放一下,接下來(lái),我們寫一個(gè)lua邏輯腳本,比如登錄界面

里面的方法邏輯如Awake方法,我們聲明我們的UI

注意注意,講解一下,這里的Awake,Start,等系統(tǒng)方法函數(shù)是和我們LuaComponent.cs

這個(gè)方法對(duì)應(yīng)著的。
還有一個(gè)非常重要的就是邏輯代碼里要有

加入原表
到此為止,我們的邏輯代碼也有了,組件代碼也有了,關(guān)聯(lián)也知道了,怎么運(yùn)行呢
簡(jiǎn)單呀,我們寫一個(gè)Lua腳本配置類,XLua里我們可以把他設(shè)置為程序入口(相關(guān)可以去GitHub上學(xué)習(xí)一下

,此文章不做講解,下次文章講解這一塊)
Lua配置類LuaToCsConfig.lua
我們首先判斷是否為當(dāng)前場(chǎng)景,如

如果是當(dāng)前場(chǎng)景,我們找到我們要添加腳本的物體,當(dāng)然我們也可以直接在此物體上掛上LuaComponet.cs腳本,
