找回密码
 立即注册
查看: 327|回复: 0

Xlua从开发到热更全流程Demo

[复制链接]
发表于 2021-8-12 12:22 | 显示全部楼层 |阅读模式
文章目录

    1.Demo框架解读2.热更流程测试(编辑器平台)
      热更前:要热更的代码:Lua代码:
    3.Android流程
      模拟器配置打包,运行路径分隔符修改打热更包:做预制体Assetbundlexlua中修改逻辑重新生成版本文件上传服务器:(IIS本地服务器演示)再次打开模拟器运行
    4.代码地址:


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)进行加载
  1. privatebyte[]MyLoader(refstring 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代码:
  1. print("bag热更逻辑")
  2. xlua.hotfix(CS.MyBagLua,'LuaOpen',function(self)print("bag打开的逻辑被热更了");local GameObject= CS.UnityEngine.GameObject
  3.     bag=GameObject.Find("AB_BagCanvas(Clone)/Top/BagPanel")--背包面板对象
  4.     MonoSingletionRoot=GameObject.Find("MonoSingletionRoot")--拿到单例对象(所有管理器都在单例中)
  5.     MyBagLua=MonoSingletionRoot:GetComponent("MyBagLua")--拿到单例对象组件if bag~=nilthenprint("打开背包"..bag.name)
  6.         bag:SetActive(failed);--关闭背包
  7.         bag:SetActive(true);--打开背包--添加格子 --单例对象的方法
  8.         self:AddSlot("BloodSlot",3,"ui/solt.assetbundle")--调用添加格子的方法,打开背包会添加3个血瓶elseprint("没有拿到物体")endend)
复制代码
当打开背包后,应当会添加一个3个物体的血瓶



3.Android流程

模拟器配置

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





然后
打包,运行




路径分隔符修改

失败:windows 平台和 安卓(linux)平台的路径分隔符 不一样,用条件编译修改Linux 风格的
一个往左,一个往右。



也可以全部改为往右(测试:win系统兼容两种分隔符)


修改完之后,即可




打热更包:

做预制体



Assetbundle



xlua中修改逻辑



重新生成版本文件


重新生成之后的版本文件:(可以看到MD5码明显不同),



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



把更改的资源传上去
再次打开模拟器



运行

完成,热更新加载出苹果


Xlua的坑肯定是有不少的,debug过程就没有展示了,主要是走一个完整的流程,读者有什么问题,可以留言,代码已放出

4.代码地址:

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 07:00 , Processed in 1.109728 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表