手游热更新方案xLua开源:Unity3D下Lua编程解决方案

简介:

C#下Lua编程支持

xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。

xLua的突破
xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是:

可以运行时把C#实现(方法,操作符,属性,事件等等)替换成lua实现;
出色的GC优化,自定义struct,枚举在Lua和C#间传递无C# gc alloc;
编辑器下无需生成代码,开发更轻量;
更详细的特性、平台支持介绍请看这里。

安装
打开zip包,你会看到一个Assets目录,这目录就对应Unity工程的Assets目录,保持这目录结构放到你的Unity工程。

如果希望安装到其它目录,请看FAQ相关介绍。

lua5.3 vs luajit
xLua有两个版本,分别集成了lua5.3和luajit,一个项目只能选择其一。这两个版本C#代码是一样的,不同的是Plugins部分。

lua5.3的特性更丰富些,比如支持原生64位整数,支持苹果bitcode,支持utf8等。出现问题因为是纯c代码,也好定位。比起luajit,lua对安装包的影响也更小。

而luajit胜在性能,如果其jit不出问题的话,可以比lua高一个数量级。目前luajit作者不打算维护luajit,在找人接替其维护,后续发展不太明朗。

项目可以根据自己情况判断哪个更适合。因为目前lua53版本使用较多,所以xLua工程Plugins目录下默认配套是lua53版本。

快速入门
一个完整的例子仅需3行代码:

安装好xLua,建一个MonoBehaviour拖到场景,在Start加入如下代码:

XLua.LuaEnv luaenv = new XLua.LuaEnv();
luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')");
luaenv.Dispose();
1、DoString参数为string,可输入任意合法的Lua代码,本示例在lua里调用C#的UnityEngine.Debug.Log打印了个日志。

2、一个LuaEnv实例对应Lua虚拟机,出于开销的考虑,建议全局唯一。

C#主动调用lua也很简单,比如要调用lua的系统函数,推荐方式是:

声明
[XLua.CSharpCallLua]
public delegate double LuaMax(double a, double b);
绑定
var max = luaenv.Global.GetInPath("math.max");
调用
Debug.Log("max:" + max(32, 12));
建议绑定一次,重复使用。生成了代码的话,调用max是不产生gc alloc的。

热补丁
侵入性小,老项目原有代码不做任何调整就可使用。
运行时影响小,不打补丁基本和原有程序一样。
出问题了可以用Lua来打补丁,这时才会走到lua代码逻辑;
这里是使用指南。

更多示例
01_Helloworld: 快速入门的例子。
02_U3DScripting: 展示怎么用lua来写MonoBehaviour。
03_UIEvent: 展示怎么用lua来写UI逻辑。
04_LuaObjectOrented: 展示lua面向对象和C#的配合。
05_NoGc: 展示怎么去避免值类型的GC。
06_Coroutine: 展示lua协程怎么和Unity协程相配合。
07_AsyncTest: 展示怎么用lua协程来把异步逻辑同步化。
08_Hotfix: 热补丁的示例(需要开启热补丁特性,如何开启请看指南)。
09_GenericMethod: 泛化函数支持的演示。
10_SignatureLoader: 展示如何读取经数字签名的lua脚本,参见数字签名的文档介绍。
文档
XLua教程.doc:教程,其配套代码这里。
XLua的配置.doc:介绍如何配置xLua。
XLua增加删除第三方lua库.doc:如何增删第三方lua扩展库。
XLua API.doc:API文档。
生成引擎二次开发指南:介绍如何做生成引擎的二次开发。
热补丁操作指南:介绍如何使用热补丁特性。
技术支持
QQ群:612705778 验证答案:有问题先找FAQ

https://github.com/Tencent/xlua
本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/p/6782141.html如需转载请自行联系原作者

jiahuafu

相关文章
|
1月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
52 4
|
4月前
|
Linux 开发工具 图形学
Unity下实现跨平台的RTMP推流|轻量级RTSP服务|RTMP播放|RTSP播放低延迟解决方案
自2018年起,我们成功实现了Unity环境下的低延迟RTSP|RTMP播放,达到毫秒级延迟,获得业界广泛认可。现已覆盖Windows、Android、iOS与Linux平台的RTMP推送、轻量级RTSP服务及RTSP|RTMP播放。通过高效采集Unity窗口或摄像头数据,并利用原生SDK进行编码与推送,确保了数据传输的高速性。此外,播放器支持多路视频同时播放,适应不同分辨率,并保持长时间运行稳定。更多技术细节和技术博文,请参考相关链接。
269 1
|
3月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
161 0
|
4月前
|
开发者 图形学 iOS开发
掌握Unity的跨平台部署与发布秘籍,让你的游戏作品在多个平台上大放异彩——从基础设置到高级优化,深入解析一站式游戏开发解决方案的每一个细节,带你领略高效发布流程的魅力所在
【8月更文挑战第31天】跨平台游戏开发是当今游戏产业的热点,尤其在移动设备普及的背景下更为重要。作为领先的游戏开发引擎,Unity以其卓越的跨平台支持能力脱颖而出,能够将游戏轻松部署至iOS、Android、PC、Mac、Web及游戏主机等多个平台。本文通过杂文形式探讨Unity在各平台的部署与发布策略,并提供具体实例,涵盖项目设置、性能优化、打包流程及发布前准备等关键环节,助力开发者充分利用Unity的强大功能,实现多平台游戏开发。
136 0
|
4月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
109 0
|
4月前
Lua语法(六)——面相对象编程
Lua语法(六)——面相对象编程
35 0
|
7月前
|
存储 自然语言处理 监控
【Unity 实用工具篇】| 游戏多语言解决方案,官方插件Localization 实现本地化及多种语言切换
Unity的多语言本地化是一个很实用的功能,它可以帮助游戏支持多种语言,让不同语言的玩家都能够更好地体验游戏。 而实现本地化的方案也有很多种,各个方案之间也各有优劣,后面也会对多个方案进行介绍学习。 本文就来介绍一个专门作用于多语言本地化的Unity官方插件:Localization 。 这个插件方便进行游戏的多语言本地化,让游戏支持多种语言,下面就来看看该插件的使用方法吧!
|
7月前
|
定位技术 C# 图形学
Unity和C#游戏编程入门:创建迷宫小球游戏示例
Unity和C#游戏编程入门:创建迷宫小球游戏示例
159 2
|
7月前
|
移动开发 安全 图形学
如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
87 0
|
7月前
|
消息中间件 Kubernetes NoSQL
Lua C接口编程(二)
Lua C接口编程(二)