IT圈老男孩1 发表于 2021-5-20 13:40

为什么现在大部分Unity公司还是在用Lua热更新?

前段时间看公司的时候发现,现在大部分公司仍然在用lua来进行热更新,大部分都是Tolua框架,也有个别还有用ulua,只有一两个公司在用ILRuntime框架,想知道为什么大部分公司还在用Lua,个人感觉Lua这个语言用起来很难受,没有规矩想怎么样就怎么样的感觉,现在也已经有ILRuntime这种可以用C#代码直接进行热更的框架,为什么还是在用Lua?

RecursiveFrog 发表于 2021-5-20 13:48

第一,ILRuntime相对于lua来说还算是比较新兴的东西
第二,很多公司有自成一套的lua框架,不想也不需要使用ILRuntime
第三,lua热更新是wow带起来的,那么大一个ip,大家也都知道,并且信任lua
但是就如你所说,ILRuntime开发效率比lua高很多,虽然纯计算的话性能不如lua,但是游戏开发还是逻辑居多,所以长远来看ILRuntime无疑会越来越流行,如果没有另外一款牛逼的热更方案介入 ILRuntime会慢慢的把lua挤出市场。
当然了,ios倒闭就万事大吉了,你好我也好

Ilingis 发表于 2021-5-20 13:48

最关键的一点是框架成熟,开发效率可控。
技术新不新从来不是开发过程最注重的点,先别说现在没有能全面超过的lua方案,就算出现了,现有的项目短期内也不会进行迁移,毕竟全员的学习成本也要考虑在项目中。

ChuanXin 发表于 2021-5-20 13:54

热更新,在手游时代一出来,就成为了开发者着要解决的一道难题。因为每次发布新版本,如果都去安装,好不容易拉来的用户,就流失了,毕竟你不是《王者荣耀》和和平精英,玩家会主动更新。有时候为了做游戏活动,我们可能要修改活动代码,活动过后,又结束,所以就需要有一种手段,用户不用重新安装游戏的情况下,能更新一些代码和业务逻辑。
这个Blake老师讲的这个
打造基于xLua热更新框架可以去看看 讲的蛮不错的
热更新分为2部分:代码热更新与资源热更新,资源热更新有成熟的流程,以前的AssetsBundle以及现在的Addressable。热更新代码就成了开发者要攻克的难题。
unity C#代码,在运行的时候,先把所有代码(框架+逻辑)都加载到内存,然后执行代码,所以代码加载完成,就无法再改了, 所以普通的C#代码,无法做代码热更新。 代码热更新的基本原理是内置一个代码解释器,游戏app运行的时候,先把底层C#代码与代码解释器运行起来,进入入口函数后,再加载游戏逻辑代码,加载完成,再使用解释器来解释执行 “逻辑代码”。这样就有机会在入口函数的时候,先到云端的服务器上把最新的逻辑代码下载下来,然后再加载到内存,完成加载后,跑最新的代码逻辑。
搞懂的热更原理以后,问题就变成了,内置哪个脚本语言的解释器?使用哪个脚本语言开发。游戏行业和其他行业不一样,大部分的核心功能都在游戏引擎代码中,而游戏引擎的代码,基本上每个引擎各成一体,没有统一的标准, 所以做为游戏行业的脚本语言,就需要2大特点:高效,轻量级。高效指的是脚本语言执行高效,轻量级指的是脚本语言很容易嵌入游戏引擎,同时脚本的体系不大,没有过多的与语言本身无关的系统和库内置在里面。满足这两大特点,的脚本语言其实不多。有一个编程语言,在它创立之初就是保持这2大理念,在2001年左右的时候被魔兽世界选为脚本语言,而风靡游戏行业,这个语言就是Lua。当Unity 需要做热更新的时候(2013年开始),而普通的C#又做不到的时候,而对于游戏行业来说Lua脚本热更新已经是很成熟的方案,自然Lua 热更新就成为了Unity热更新的首选。
基于Lua做Unity热更新,需要解决两大问题:
   (1)Unity引擎内置Lua解释器, 可内置标准Lua,与运行性能更好的LuaJIT。
   (2)导出Unity引擎接口给Lua脚本调用。
这两大问题有开源的框架帮我们解决了,著名的就有xLua与uLua。基于这两大框架,我们就可以使用Lua来开发Unity项目了。
所以Lua在Unity热更新中的地位,是行业历史选择的必然结果。但是Lua毕竟不是Unity指定的C#,
很多同学不会Lua,现在热更新也多了一些解释型C#的方案,里面的佼佼者就是 C# Light与ILRuntime。现在ILRuntime热更也在Unity中慢慢流行起来。附视频教程大家可以学习参考一下
两小时带你搞懂ILRuntime热更新

KaaPexei 发表于 2021-5-20 13:57

我寻思着mono不就是带解释器的虚拟机吗?

闲鱼技术01 发表于 2021-5-20 13:59

一个技术人员,不可能决定业务更不可能决定老板的"创意",你说怎么选方案
万一有东西实现不了,xlua不行的ilruntime也不行,你能说大家都不行
那要是xlua行而你选了ilruntime不行呢?
要么你走人,要么你有实力完善ilruntime,你要是有实力挖完ilruntime的坑你也不会来着问了
技术选型嘛,要么你熟,要么大多外援熟

DungDaj 发表于 2021-5-20 14:05

1.因为C#程序员大概比lua程序员值钱。
2.lua程序员多,成本低。
3.ilruntime 还不够完善。

HuldaGnodim 发表于 2021-5-20 14:12

快,开发快,招人快,运行快,其他框架或多或少有别的缺陷。
我也吐槽lua的狗屎索引从1开始不是一天两天了,但依然没办法,自己写的脚本引擎更狗屎,连lua运行速度的十分之一都赶不上,到头来还是只有这个东西好用。

量子计算9 发表于 2021-5-20 14:13

就公司角度,需要一个稳定可靠值得信任的方案,lua无疑是最适合的

rustum 发表于 2021-5-20 14:19

Lua、Lua源代码、xLua/toLua/sLua以及常用第三方库都比较简单 容易hold住
页: [1]
查看完整版本: 为什么现在大部分Unity公司还是在用Lua热更新?