1.hotfix.md說(shuō)明,常見(jiàn)FAQ解答
hotfix.md的原話(huà):這個(gè)特性默認(rèn)是關(guān)閉的,需要添加HOTFIX_ENABLE宏打開(kāi) (在Unity的File->Build Setting->Scripting Define Symbols下添加)。
2.hotfix注入
編輯器下需要執(zhí)行"XLua/Generate Code"和"XLua/Hotfix Inject In Editor", 如果打印“hotfix inject finish!”或者“had injected!”,那表示已經(jīng)注入成功
3.示例:用了官方的example里的例子
C#代碼,提供方法體,方法內(nèi)部調(diào)用lua
using UnityEngine;
using System.Collections;
using XLua;
[Hotfix]
public class HotfixTest : MonoBehaviour
{
LuaEnv luaenv = new LuaEnv();
public int tick = 0; //如果是private的,在lua設(shè)置xlua.private_accessible(CS.HotfixTest)后即可訪(fǎng)問(wèn)
void Start()
{
luaenv.DoString("require 'hotfix'");//通過(guò)加載lua文件的方式
}
}
lua代碼,hotfix.lua.txt的內(nèi)容:即方法的具體實(shí)現(xiàn),也就是打了補(bǔ)丁,這個(gè)部分就是可以熱更的
xlua.hotfix(CS.HotfixTest, 'Update', function(self)
self.tick = self.tick + 1
if (self.tick % 50) == 0 then
print('<<<<<<<<Update in lua, tick = ' .. self.tick)
end
end)
當(dāng)我們更改了lua代碼,不用打新包,只用發(fā)布lua資源更新,用戶(hù)更新資源版本就有新的代碼的功能。詳細(xì)見(jiàn)下描述。
4.熱更分析
所謂熱更,就是把C#里的方法內(nèi)容在lua中執(zhí)行,把lua代碼打包成assetsbundle
(ps:lua不需要編譯,做了修改會(huì)執(zhí)行新的修改,而C#不行,如果把C#腳本打包成assetsbundle資源文件,更新資源后沒(méi)法編譯,執(zhí)行不到新的修改)
5.自動(dòng)化打包lua(在完善中)
目的明確,就是要把示例中的hotfix.lua.txt打包成assetsbundle資源文件,當(dāng)然不可能手動(dòng)的一個(gè)個(gè)去操作(...),配置自動(dòng)化build assets lua,每次更新代碼了就發(fā)布lua資源更新到assetsbundle上,完成了這些,打包一次,以后的代碼用資源更新的方式進(jìn)行更新,當(dāng)然只能是lua代碼,以后每次打開(kāi)app就先檢測(cè)資源更新,有更新就assetsbundle下載,新的代碼就啟用了.