Unity使用XLua热更新流程

xlua是由腾讯维护的一个开源项目,我们可以在github上下载这个开源项目并查看一些相关文档
官网:https://github.com/Tencent/xLua
配置文档:https://github.com/Tencent/xLua/blob/master/Assets/XLua/Doc/hotfix.md
常见问题解答:https://github.com/Tencent/xLua/blob/master/Assets/XLua/Doc/faq.md

接下来我们来走一遍使用xlua的大致流程:

第一步:下载xlua:进入官网并下载整个xlua项目

第二步:将xlua导入项目:将下载后的xLua-master文件夹下的Assets文件夹拷贝到项目文件夹下,将Tools文件夹拷贝到项目文件夹Assets的同级目录下并删除其中的System.Core.dll文件

这一步完成后unity编辑器的工具栏会多出一个Xlua的选项,其中里面会有两个子选项(Gennerate Code生成脚本、Clear Gennerate Code清除脚本)

在这里插入图片描述

第三步:开启热更新:打开playersettings,开启脚本宏命令标志输入HOTFIX_ENABLE并按ENTER(即找到othersetins中的ScriptsingDefineSymbols输入HOTFIX_ENABLE并按ENTER)敲完按回车才会进行编译

在这里插入图片描述

编译完成后Xlua选项中多了一项(Hofix Inject In Editor)

C#脚本发生了任何更改都需要按选项1来生成代码,有问题就选项2清楚脚本再重新生成,生成代码结束后会debug一个finished出来,此时再选项3进行注入

在这里插入图片描述

第四步:打开unity安装目录中的EditorDataManagedUnity.Cecil.Pdb.cll、Mdb.dll、.cll三个文件拷贝到工程目录下的xula文件夹下的src的editor文件夹下

关于XLua的使用:

xlua在项目中的启动、调用、结束等全过程:

我们使用一个脚本来管理xlua的流程 HotfixScript

在这里插入图片描述

脚本中创建一个唯一的解释器 new LuaEnv()

加载自定义loader AddLoader()

搜寻并执行lua文件 Dostring(" require ‘lua文件名’ ")

   private LuaEnv luaEnv;

    void Awake()
    {
        luaEnv = new LuaEnv();//创建解释器
        luaEnv.AddLoader(MyLoader);//加载自定义loader
        luaEnv.DoString("require 'fish'");//搜寻lua脚本
    }

自定义Loader需要传入一个文件路径再返回读取到的文件的byte数组

 private byte[] MyLoader(ref string filePath)
    {
        string absPath = @"E:appunity2018productsFishXlua" + filePath+".lua.txt";
        return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(absPath));
    }

最后的释放资源分两部分,一个是释放方法委托,一个是解释器,前者在OnDisable中调用lua代码来执行,后者在OnDestroy中来释放

  void OnDisable()
    {
        luaEnv.DoString("require 'fishDispose'");
    }

    void OnDestroy()
    {
        luaEnv.Dispose();
    }

如何使用lua代码对游戏内容进行更改?
在原来的可能出问题的C#类上打上hotfix标签,在方法上打上luacallcsharp标签

在这里插入图片描述

在这里插入图片描述

之后便可在lua脚本中进行更改

在这里插入图片描述

修改格式如下:

xlua.hotfix(CS.类名,‘方法名’,function(self)

具体实现的方法体

end)

PS:当在lua脚本中可能需要用到某个c#类中的私有访问属性字段时,可以使用以下格式来获取访问权限

xlua.private_accessible(CS.类名)

调用C#中的一些自带的类、方法

CS.UnityEngine、CS.类名.方法……

通过自身对象调用自身方法:self:方法名() 或者 self.方法名(self)  前者使用冒号的方式是为了简写传入self参数的过程

解绑委托:专门用一个lua脚本来负责解绑所有lua调用重写过的方法
例如:xlua.hotfix(CS.类名,‘方法名’,nill)
与改写方法类型,只是在最后一个参数将function改成了nill表示置空

在这里插入图片描述

总结一下使用xlua热更新的开发过程:

首先开发业务代码
在所有可能出现问题的类上打上hotfix标签,在所有lua调用C#的方法上打上luacallcsharp标签,在所有csharp调用lua的方法上打上csharpcalllua标签
打包发布
修改bug时只需要更新lua文件,修改资源时只需要更新AB包,用户只需要去下载AB包和lua文件就可以了

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
众所周知,人工智能是当前最门的话题之一, 计算机技术与互联网技术的快速发展是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值