首页 > 其他分享 >【专栏精选】热更新之xLua

【专栏精选】热更新之xLua

时间:2023-04-28 16:35:17浏览次数:39  
标签:luajit lua C# xLua 精选 Unity 专栏 Lua


本文节选自洪流学堂公众号技术专栏《大话Unity2019》,未经允许不可转载。

洪流学堂公众号回复专栏,查看更多专栏文章。


洪流学堂,让你快人几步。你好,我是郑洪智。

小新:“之前你提到过,Unity热更新有两大流派,C#派和lua派,那lua派是啥样的呢?”
大智:“lua是一门历史悠久的脚本语言,从端游那个年代就被广泛应用在游戏开发中,所以到了现在的手游时代,有很多团队也让lua技术再次发展了起来。”

Lua语言

Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。

Lua设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译运行。Lua并没有提供强大的库,因为它的定位就是作为嵌入的脚本语言,所以Lua不适合开发独立应用程序。Lua有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。

Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用,特别是在端游阶段,游戏几乎都是使用C/C++开发的,lua给游戏开发带来了极大的便利性。

不仅仅作为扩展脚本,lua也可以作为普通的配置文件,代替XML、JSON、ini等文件格式,并且很容易理解和维护。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译运行。一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。

很多我们熟悉的游戏中都使用了Lua脚本,比如魔兽世界、大话西游2、仙剑奇侠传、古剑奇谭等。

Lua之所以在游戏开发中这么受欢迎,也是因为它的优点:(1)语言优美、轻巧 (2)性能优良、速度快 (3)可扩展性强。

Unity与Lua

Unity中的Lua也一直在发展,目前Unity中比较流行的几个Lua框架有:

其中xLua是腾讯团队开发维护的一个框架,广泛应用在腾迅系的手游中,也是目前最受认可以及使用比较多的一个框架。

相对于我们之前学过的ILRuntime呢,lua也有一些优势和弱势。
Lua的优势:

  • 技术更为成熟
  • 成功的商业案例更多

Lua的劣势:

  • 需要开发团队掌握Lua
  • 可能需要维护C#和lua两套代码

后面我们会以目前最为主流的xLua来进行学习。

xLua

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

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

  • 可以运行时把C#实现(方法,操作符,属性,事件等等)替换成lua实现,也就是热补丁功能;
  • 出色的GC优化,自定义struct,枚举在Lua和C#间传递无C# gc alloc;
  • 编辑器下无需生成代码,开发更轻量;

下载

下载地址为:https://github.com/Tencent/xLua/releases

可以选择最新的zip下载:

上面图中可以看到xLua有几个不同的版本,有什么区别呢?

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

  • xlua:此版本集成的是lua5.3,lua5.3的特性更丰富些,比如支持原生64位整数,支持苹果bitcode,支持utf8等。出现问题因为是纯c代码,也好定位。比起luajit,lua对安装包的影响也更小。
  • xlua_luajit:此版本集成的是luajit,luajit胜在性能,如果其jit不出问题的话,可以比lua高一个数量级。目前luajit作者不打算维护luajit,在找人接替其维护,后续发展不太明朗。
  • xlua_general:用于通用的.Net或Mono环境,可以在非Unity环境中使用。

目前lua53版本使用较多,所以xLua工程Plugins目录下默认配套是lua53版本,我们后面学习中也会使用这个版本。

安装

安装非常简单,新建一个Unity工程。

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

如果你遇到了报错:
error CS0246: The type or namespace name 'ILGenerator' could not be found (are you missing a using directive or an assembly reference?)

可以查阅xLua的FAQ文档https://github.com/Tencent/xLua/blob/master/Assets/XLua/Doc/faq.md

在这我也把这个问题的解决方法贴过来:

ILGenerator报错
这是因为Api Compatibility Level设置为.net standard 2.0,而.net standard 2.0不支持emit导致的。

解决办法(三选一):

  • 把“Scripting Backend”设置为3.5
  • 把Api Compatibility Level设置为.Net 4.x
  • 更新xLua到2019年1月8号后面的版本,可以解决编译问题,但由于没有emit的支持,编辑器下要生成代码才能跑了,建议执行“XLua/Generate Minimize Code”,这个少生成些代码。

在这我选择了第二种把Api Compatibility Level设置为.Net 4.x,来暂时解决这个问题。

改成这个造成的可能的影响是:影响程序最终打包的体积,因为这个选项会包含所有的.Net 4兼容的API。

修改后我们的工程里就不报错了。

总结

大智:“今天我们了解了Lua以及xLua的使用前的准备。”

今日思考题

大智:“在你的电脑上建立一个xLua的工程,为我们明天做准备哦”
小新:“好嘞!”
大智:“收获别忘了分享出来!也别忘了分享给你学Unity的朋友,也许能够帮到他。”


洪流学堂公众号回复专栏,查看更多专栏文章。

《大话Unity2019》,大智带小新学Unity2019的有趣经历,让你学Unity更简单。


标签:luajit,lua,C#,xLua,精选,Unity,专栏,Lua
From: https://blog.51cto.com/u_5746184/6234800

相关文章

  • 【专栏精选】Unity热更新之ILRuntime
    本文节选自洪流学堂公众号技术专栏《大话Unity2019》,未经允许不可转载。洪流学堂公众号回复专栏,查看更多专栏文章。洪流学堂,让你快人几步。你好,我是郑洪智。小新:“热更新真的是打开了一片天啊,现在我越发感觉热更新能做的事情太多了。之前做了一个项目,每次打包都好花费半小时,如果有......
  • 【专栏精选】Unity中的HTTP网络通信
    本文节选自洪流学堂公众号技术专栏《大话Unity2019》,未经允许不可转载。洪流学堂公众号回复专栏,查看更多专栏文章。洪流学堂,让你快人几步。你好,我是郑洪智。大智:“小新,今天开始,我们来学习Unity中的HTTP通信。”小新:“为啥不先学Tcp和Udp呢?这俩不是基础么?”大智:“虽然这俩是基础,但......
  • 【专栏精选】实战:百度语音识别
    本文节选自洪流学堂公众号技术专栏《大话Unity2019》,未经允许不可转载。洪流学堂公众号回复语音识别获取源码工程。洪流学堂,让你快人几步。你好,我是郑洪智。大智:“今天给你来点刺激的。”小新满面红光:“啥刺激的?人家可还是个小孩子。”大智:“带你实战!”小新:“啊?智哥你变了!”大......
  • 视觉定位领域专栏(一)领域介绍、应用场景和研究难点
    前言 上一篇介绍了什么是视觉定位,以及视觉定位在各行各业的应用点和目前的研究难点在哪。本篇主要介绍视觉定位领域常用的一些数据集,分为室内定位数据集和室外定位数据集,每个数据集附有数据集获取地址和数据集样例。本教程禁止转载。同时,本教程来自知识星球【CV技术指南】更多技......
  • 视觉定位领域专栏(一)领域介绍、应用场景和研究难点
    前言 本篇主要介绍三个方面,即视觉定位领域介绍、应用场景以及研究难点,同时会对专栏后续讲解内容做一个概述。本教程禁止转载。同时,本教程来自知识星球【CV技术指南】更多技术教程,可加入星球学习。欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文......
  • 语义分割专栏(二)复习FCN的编解码结构
    前言 在这一期中,我们先简要复习一遍FCN网络,随后进入今天的重点——编码器-解码器架构。本教程禁止转载。同时,本教程来自知识星球【CV技术指南】更多技术教程,可加入星球学习。欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV......
  • 语义分割专栏(一)解读FCN
    前言 本文将介绍全卷积神经网络(FullyConvolutionalNetwork,简称FCN)的基础知识,包括它的网络结构、起源、应用、输入输出格式和pytorch代码实现等内容。本教程禁止转载。同时,本教程来自知识星球【CV技术指南】更多技术教程,可加入星球学习。欢迎关注公众号CV技术指南,专注于计算机......
  • 语义分割专栏(零)语义分割概述
    前言 在计算机视觉领域中,图像识别是一项非常重要的任务。而语义分割则是其中的一个子任务。与图像分类和目标检测不同,语义分割不仅需要识别出图像中的物体,还需要将每个像素分配给它所属的类别。本专栏适用于想要入门语义分割与想要对语义分割有一个全面系统的了解的读者。本教程......
  • 模型轻量化-网络剪枝专栏(一)网络剪枝概述
    前言 近年来,深度神经网络在许多计算机视觉和自然语言处理任务中取得了很大的成功。然而,这些网络通常具有非常高的计算和存储成本,限制了它们在嵌入式设备和移动设备上的部署。为了解决这个问题,网络剪枝技术被广泛应用于深度神经网络中,以减少其计算和存储需求,成为模型压缩领域流行......
  • Xlua热更流程
    转载自:深入理解xLua基于IL代码注入的热更新原理-iwiniwin-博客园(cnblogs.com)例子:第一步:GenerateCode:为打了Hotfix标签的方法生成对应的匹配函数[Hotfix]publicclassTestXLua{publicintAdd(inta,intb){returna-b;//这里的Add方法故意......