文章目录
1.Demo框架解读
1.首先MonoMain作为程序主入口,在执行完版本检查之前所有的脚本都不进行加载,执行完版本检查后,将需要的资源以及热更的逻辑加载。
2.不能滥用热更新,所有的热更lua都用该用 main来控制,举例运行时不要直接调用C#的UIBag,而是通过MyBagLua 来打开背包,同时MyBagLua也是提供给lua的可以进行热更的接口,只有C#主动提供出来的接口才允许Lua热更。
3.在Lua测,则是main函数进行控制,加载哪些文件热更,哪些文件不进行热更。
4.重点:最好不要C# 与Lua混合开发,然后又配上lua的热更,(已经采坑。),
首先C# 与lua混合开发,一是影响效率,lua的效率是没有C#快的,
其次,调试难度很大,lua的报错不好调试,尤其是复杂逻辑,出错很难修改,结果就是开发效率大大降低
最后,也是最关键的:项目管理难度会加大,多人开发,很容易写成一团乱麻,一会成员有的写在C#,一会有的写在lua,项目管理很容易混乱起来
抱怨完了,下面继续说热更新。
首先热更新不等于增量更新! 所有的热更逻辑在版本更新后都应该写入C#,热更只是临时的措施!只是打补丁的措施!
细节解读:
1.使用HotfixCfg进行配置,避免忘记打标签(unity高版本只支持列表方式xlua方式二)
2.将需要热更的方法封装起来,名称带有lua标识(没有引用的脚本,如果需要调用要加LuaCallCSharp,否则可能代码剪裁)
3.添加自己的Loader,让Mainlua从下载目录(Application.persistentDataPath)进行加载
private byte[] MyLoader(ref string filePath)
{
string path = Application.persistentDataPath + "/AssetBundles/" + buildTarget + "/Xlua/" + filePath + ".lua.txt";
//string path = Application.dataPath + "/MyLoader/" + filePath + ".lua.txt";
return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(path));
}
更多下载细节请下载源码(有详细注释)
2.热更流程测试(编辑器平台)
背包系统的热更(其实应该做个商城物品热更,,就假装这个背包是商城吧,之后找时间做商城)
热更前:
要热更的代码:
我们把LuaOpen热更了,在打开背包之后 同时添加新的格子
Lua代码:
print("bag热更逻辑")
xlua.hotfix(CS.MyBagLua, 'LuaOpen', function(self)
print("bag打开的逻辑被热更了");
local GameObject= CS.UnityEngine.GameObject
bag=GameObject.Find("AB_BagCanvas(Clone)/Top/BagPanel")--背包面板对象
MonoSingletionRoot=GameObject.Find("MonoSingletionRoot")--拿到单例对象(所有管理器都在单例中)
MyBagLua=MonoSingletionRoot:GetComponent("MyBagLua")--拿到单例对象组件
if bag~=nil
then
print("打开背包"..bag.name)
bag:SetActive(failed);--关闭背包
bag:SetActive(true);--打开背包
--添加格子 --单例对象的方法
self:AddSlot("BloodSlot", 3, "ui/solt.assetbundle")--调用添加格子的方法,打开背包会添加3个血瓶
else
print("没有拿到物体")
end
end)
当打开背包后,应当会添加一个3个物体的血瓶
3.Android流程
模拟器配置
先ping通模拟器的网络(确保能够进行热更新下载)
模拟器要开启代理,才能访问到
然后
打包,运行
路径分隔符修改
失败:windows 平台和 安卓(linux)平台的路径分隔符 不一样,用条件编译修改Linux 风格的
一个往左,一个往右。
也可以全部改为往右(测试:win系统兼容两种分隔符)
修改完之后,即可
打热更包:
做预制体
Assetbundle
xlua中修改逻辑
重新生成版本文件
重新生成之后的版本文件:(可以看到MD5码明显不同),
上传服务器:(IIS本地服务器演示)
把更改的资源传上去
再次打开模拟器
运行
完成,热更新加载出苹果
Xlua的坑肯定是有不少的,debug过程就没有展示了,主要是走一个完整的流程,读者有什么问题,可以留言,代码已放出
4.代码地址:
https://gitee.com/euphorialer_admin/xlua-test