XLua热更新用法全流程总结(所有容易出问题的点)
本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) |
Chinar —— 心分享、心创新! 记录 Xlua 完成热更新流程 为新手节省宝贵的时间,避免采坑! |
Chinar 教程效果:
全文高清图片,点击即可放大观看 (很多人竟然不知道)
1
Description —— 描述
Xlua 是腾讯出品的热更新方案
由于其开源,且热更新方案简单易用,便于开发者对代码进行维护与修改,而得到广泛认可
这里 Chinar 对 Xlua 实现热更新的流程与坑进行一些记录与说明
2
Xlua Import and Open Hotfix —— Xlua导入项目并且开启热更新
导入 Xlua /到项目中后,我们需要在设置面板开启热更新才可以完全使用
输入命令后,一定要回车,然后等待编译!
3
Generate and Inject Scripts —— 生成与注入脚本文件
当工程中 Script /脚本文件有变更的时候
例如增加/删除/增加标签[Hotfix]/增加函数标签[LuaCallCSharp]
注意:只要有任何变动,就需要重新生成和注入脚本
另外如果出现花式报错时,就清除所有,并重新生成和注入
4
Custom LuaLoader —— 自定义Loader
为了测试在工程中调用 Lua 文件
新建一个脚本 ChinarHotFix ,并挂载当前场景
新建一个 Lua 文件放在一个目录下(因为我们自定义的Loader,是要指定该目录中的Lua文件的)
注意:
Lua文件的后缀名,要与函数中的 路径后缀 保持一致
C# 文件:
using System.IO; using System.Text; using UnityEngine; using XLua; /// <summary> /// 热更新测试脚本——该脚本新建一个 Lua环境,并完成对 Lua脚本的指向调用 /// </summary> public class ChinarHotFix : MonoBehaviour { private LuaEnv luaEnv; //声明一个Lua环境对象 void Start() { luaEnv = new LuaEnv(); //实例化一个 luaEnv.AddLoader(ChinarLoader); //添加Loader luaEnv.DoString("require'ChinarLuaTest'"); //引用名为: ChinarLuaTest 的 Lua 脚本 } /// <summary> /// 自定义一个 Loader /// </summary> /// <param name="luaFileName">Lua文件名</param> /// <returns>字节组</returns> private byte[] ChinarLoader(ref string luaFileName) { return Encoding.UTF8.GetBytes(File.ReadAllText(@"C:\Users\Administrator\Desktop\ChinarXLuaDemo\LuaFiles\" + luaFileName + ".lua")); //读指定目录下的 Lua 文件,并返回字节组 } }
Lua 文件:
print('Chinar')
5
Before the LuaEnv.Dispose —— 释放Lua环境之前
运行后需要对 LuaEnv 环境进行释放
释放 LuaEnv 之前还要反注册,那些注册到C#中的回调函数
不然就会造成 LuaEnv 已经释放了,但是 Xlua 机制中的 Delegate 中的函数回调并没有被释放
直接新建一个 Lua 脚本,专门管理并释放 Delegate 中的函数的释放
例如:你通过Lua脚本 xlua.hotfix(CS.ChinarTest,'ChinarTestMethod',function)
注册到 C# 中的函数
则通过新建一个 Lua 脚本ChinarDispose.lua
,写上 xlua.hotfix(CS.ChinarTest,'ChinarTestMethod',nil)
质空,即可完成释放
注意:每通过Lua脚本修改一个C#函数,都需要在ChinarDispose.lua
脚本中添加对应函数的释放/删除操作
更改后,可进行双清、释放的 C# 文件:
using System.IO; using System.Text; using UnityEngine; using XLua; /// <summary> /// 热更新测试脚本——该脚本新建一个 Lua环境,并完成对 Lua脚本的指向调用 /// </summary> public class ChinarHotFix : MonoBehaviour { private LuaEnv luaEnv; //声明一个Lua环境对象 void Start() { luaEnv = new LuaEnv(); //实例化一个 luaEnv.AddLoader(ChinarLoader); //添加Loader luaEnv.DoString("require'ChinarLuaTest'"); //引用名为: ChinarLuaTest 的 Lua 脚本 } /// <summary> /// 自定义一个 Loader /// </summary> /// <param name="luaFileName">Lua文件名</param> /// <returns>字节组</returns> private byte[] ChinarLoader(ref string luaFileName) { return Encoding.UTF8.GetBytes(File.ReadAllText(@"C:\Users\Administrator\Desktop\XluaProjects\LuaFiles\" + luaFileName + ".lua")); //读指定目录下的 Lua 文件,并返回字节组 } /// <summary> /// 释放掉函数 /// 此函数会在 OnDestroy 之前调用 /// </summary> private void OnDisable() { luaEnv.DoString("require'ChinarDispose'"); } /// <summary> /// 释放资源 /// 此函数会在最后调用,物体被删除时 /// </summary> private void OnDestroy() { luaEnv.Dispose(); } }
ChinarDispose.lua文件:
xlua.hotfix(CS.ChinarTest,'ChinarTestMethod',nil) --xlua.hotfix(CS.ChinarTest1,'ChinarTestMethod1',nil)只要有修改C#中对应函数,都需要在这里完成释放操作 --xlua.hotfix(CS.ChinarTest2,'ChinarTestMethod2',nil) --xlua.hotfix(CS.ChinarTest3,'ChinarTestMethod3',nil)
6
private Variable —— 私有变量
正常情况,我们是无法直接通过 Lua 直接访问到 C# 中的私有变量的
然而 Xlua 机制为我们提供了一个非常简便的解决方案
当我们需要访问某个 C# 类中的私有变量时,只需要在 Lua 代码中加上一句话
xlua.private_accessible(CS.ChinarTest)
然后,我们就可以访问到 C# ChinarTest
类中的私有变量了
更改后,可进行双清、释放的 C# 文件:
using UnityEngine; using XLua; [Hotfix] public class ChinarTest: MonoBehaviour { private int Number = 666;//私有数字变量--例如这么一个私有变量 }
lua文件中加上:
xlua.private_accessible(CS.ChinarTest)--只有加上这句话,才可以访问C#对应类中的私有变量
支持
May Be —— 搞开发,总有一天要做的事!
拥有自己的服务器,无需再找攻略! Chinar 提供一站式教程,闭眼式创建! 为新手节省宝贵时间,避免采坑! |
先点击领取 —— 阿里全产品优惠券 (享受最低优惠)
1 —— 云服务器超全购买流程 (新手必备!)
2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)
3—— Windows 服务器配置、运行、建站一条龙 !
4 —— Linux 服务器配置、运行、建站一条龙 !
技术交流群:806091680 ! Chinar 欢迎你的加入
END
本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究
对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com
对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
使用Numpy和Opencv完成图像的基本数据分析(Part II)
在上一节中,主要是介绍了图像的基本知识以及OpenCV的基本操作,具体内容参见“使用Numpy和Opencv完成基本图像的数据分析(Part I)”。这部分内容是接着上一节的内容,主要介绍一些其它的操作。 使用逻辑操作处理像素值 可以使用逻辑运算符创建相同大小的数组。但是,逻辑运算操作并不会创建出任何新的数组,只是将True返回给主机变量(host variable)。例如:假设在RGB图像中过滤掉一些像素值低的像素或像素值高的像素(以及其它任何条件),将RGB转换为灰度图看起来不错,但是我们目前不会对彩色图像进行这样的处理。 首先加载图像,并将其显示在屏幕上: pic=imageio.imread('F:/demo_1.jpg') plt.figure(figsize=(10,10)) plt.
- 下一篇
简单优化前端工程几种方式(上篇)
使用CDN 如果A网站和B网站, 同时使用了 https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js的资源, 在访问其他网站A时, 浏览器会缓存jquery.min.js资源文件, 访问网站B时,就可以免于下载jquery.min.js的文件, 这样既节省了服务器流量, 又提升了资源加载的速度, 一举两得~ 减少网络请求 使用雪碧图(用Photoshop将多个icon拼接到一张图上) 将多个js文件合并压缩为单个js文件(使用Webpack,或在线工具) 减少图片尺寸 可以使用PP鸭一键压缩, 具体介绍: PP鸭为你的图片瘦瘦瘦身 (支持快速压缩jpg, png, gif三种格式) 将图片保存为渐进式jpg 将图片保存为渐进式jpg后, 图片在浏览器显示时, 可以由模糊到清晰渐进式加载, 提升用户体验 将javascript脚本放到html的底部 HTML文件是从上往下渲染的, 如果js脚本有大量耗时操作, js执行期间, 用户是不能看到页面的 mdn的解释链接: https://developer.mozilla.org/zh-CN/do...
相关文章
文章评论
共有0条评论来说两句吧...