Xlua从开发到热更全流程Demo

文章目录

1.Demo框架解读

Xlua从开发到热更全流程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方式二)
Xlua从开发到热更全流程Demo
2.将需要热更的方法封装起来,名称带有lua标识(没有引用的脚本,如果需要调用要加LuaCallCSharp,否则可能代码剪裁)
Xlua从开发到热更全流程Demo
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.热更流程测试(编辑器平台)

背包系统的热更(其实应该做个商城物品热更,,就假装这个背包是商城吧,之后找时间做商城)

热更前:

Xlua从开发到热更全流程Demo
Xlua从开发到热更全流程Demo

要热更的代码:

我们把LuaOpen热更了,在打开背包之后 同时添加新的格子
Xlua从开发到热更全流程Demo

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个物体的血瓶
Xlua从开发到热更全流程Demo

3.Android流程

模拟器配置

先ping通模拟器的网络(确保能够进行热更新下载)
模拟器要开启代理,才能访问到
Xlua从开发到热更全流程Demo
Xlua从开发到热更全流程Demo

Xlua从开发到热更全流程Demo
然后

打包,运行

Xlua从开发到热更全流程Demo
Xlua从开发到热更全流程Demo

路径分隔符修改

失败:windows 平台和 安卓(linux)平台的路径分隔符 不一样,用条件编译修改Linux 风格的
一个往左,一个往右。
Xlua从开发到热更全流程Demo
Xlua从开发到热更全流程Demo
也可以全部改为往右(测试:win系统兼容两种分隔符)
Xlua从开发到热更全流程Demo
修改完之后,即可
Xlua从开发到热更全流程Demo
Xlua从开发到热更全流程Demo

打热更包:

做预制体

Xlua从开发到热更全流程Demo

Assetbundle

Xlua从开发到热更全流程Demo

xlua中修改逻辑

Xlua从开发到热更全流程Demo

重新生成版本文件

Xlua从开发到热更全流程Demo
重新生成之后的版本文件:(可以看到MD5码明显不同),
Xlua从开发到热更全流程Demo

上传服务器:(IIS本地服务器演示)

Xlua从开发到热更全流程Demo
Xlua从开发到热更全流程Demo
把更改的资源传上去

再次打开模拟器

Xlua从开发到热更全流程Demo

运行

完成,热更新加载出苹果
Xlua从开发到热更全流程Demo
Xlua的坑肯定是有不少的,debug过程就没有展示了,主要是走一个完整的流程,读者有什么问题,可以留言,代码已放出

4.代码地址:

https://gitee.com/euphorialer_admin/xlua-test

上一篇:框架笔记:记录XLua的简单接入


下一篇:toLua与Xlua使用方法总结