最全面、最前沿、最专业的游戏研发实战

提供最全面的游戏研发技能分享,让您在最短时间变成高级游戏工程师

查看:0|回复:2

【环境】为什么lua在游戏开发中应用普遍?

 attach_img

1

帖子

0

回复

0

积分
最后登录:
2025-03-05 21:08
注册时间:
2023-04-19 17:20
楼主
  发表于:2025-03-05 22:43:24|查看用户信息

lua在游戏开发中的广泛应用,源于其独特的特性与优势。我有幸见证了这一过程,自2011年进入游戏行业以来,我便开始使用lua。那时,手游尚未兴起,unity还在页游领域挣扎。我在一家小公司担任后台主程,使用lua编写后台业务逻辑。随后,为了提高开发效率,我在unity中嵌入lua,使后台人员也能参与客户端逻辑的编写,实现了部分代码共享。

2015年,我加入腾讯,虽然主要工作是后台程序,但凭借之前的经验,我为客户端组件团队开发了一个基于unity的lua组件,命名为xLua。起初,这个组件是为了满足特定需求而设计的,但随着项目的发展,xLua逐渐成为了我主要负责的项目。2017年,xLua对外开源,受到广泛认可,至今已有8000+ star,被《原神》等大型项目采用。

在游戏领域,lua的兴起与魔兽世界的使用、云风的推荐等密切相关,但其在2015年左右崛起的关键优势在于代码段占用。那时,由于苹果要求应用提交64位版本,unity刚为此推出了il2cpp。然而,il2cpp早期占用空间较大,而当时iOS应用允许的代码段限制较小(iOS7以前版本为40M,iOS7为60M),这使得许多项目对第三方组件的代码段占用提出了严苛的要求。lua凭借其小体积优势,在这一时期赢得了开发者们的青睐。

然而,随着技术的发展和应用需求的演变,lua的优势也在发生变化。ios9以上代码段限制放宽至900M,体积小不再是关键因素。同时,脚本逻辑的增多、小游戏的兴起等趋势对lua提出了新的挑战。小游戏的兴起使得越来越多的团队开始重视这一渠道,而lua在维护、模块间配合、人员流动等方面与动态类型语言的结合可能带来一定的复杂性。

为应对这些变化,我曾考虑为lua寻找更合规的脚本方案,以适应苹果的jscore和google的v8,但项目进展受阻。后来,为了探索unreal的脚本方案,我选择了基于typescript的语言,推出了puerts。puerts在小游戏/h5领域具有独特优势,能够实现unity下js的直接运行,而lua则通过将虚拟机编译为wasm,然后在wasm虚拟机上执行。js的运行方式在性能和稳定性方面通常优于这种虚拟机套虚拟机的模式。

针对小游戏/H5项目,puerts能够实现跨项目共享组件、经验和人员,为公司节省技术栈成本。此外,puerts支持nodejs脚本后端,这为跨平台桌面开发框架electron的构建提供了可能,同时也为游戏引擎、nodejs和全平台应用的结合带来了新机遇。

在性能方面,我持续对unity版本的puerts进行优化,寻找质变方案。几周前,我发现了一项优化,使android下的性能得到了数量级的提升,从落后于xLua转变为7倍反超。这一优化将在unity puerts的v2版本中发布。此外,puerts v2已经发布预览版,项目开始实装。关于性能,v2预览版在android下的表现确实优于最新xlua发布版本,但在实际应用中,性能差异还需根据具体情况进行评估。


1

帖子

3

回复

4

积分
最后登录:
2025-03-05 18:39
注册时间:
2024-07-07 15:22
1 楼
  发表于:2025-03-05 22:44:26|查看用户信息

用过Lua的都知道,Lua无论在与C/C++数据传递,还是在封装都很方便,API非常简单。同时Lua的许可证和紧凑性(把lib编译进程序即可),都十分利于集成。这些都是Python和V8不能比的。同时,Lua编程学习难度极低。Python虽然容易学,但不简单;JavaScript学习难度不够低。实际上,Lua进入游戏业非常早,早在1998年卢卡斯的《异域狂想曲》(Grim Fandango)中,就首次在游戏领域用到了Lua。十年之前著名的游戏博德之门、猴岛4都用了Lua。至少从开源代码来看,云风对Lua的使用是十分重度的,比如skynet的入口是在Lua上。国内很多游戏对Lua的使用很浅,多是把一些需要经常改的运算放出来给Lua做。


0

帖子

1

回复

1

积分
最后登录:
2025-03-05 18:25
注册时间:
2023-02-26 14:02
2 楼
  发表于:2025-03-05 22:45:20|查看用户信息

我从另一个角度来回答这个问题。揭示游戏程序框架与Lua关系一个关键的方面。和所有人一样,曾经认为所有脚本语言能嵌入到引擎中都是一样的。直到引擎架构足够复杂的时候,才发现了区别。在将脚本嵌入到本身就要处理多进程、多线程的框架之中时,脚本本身的架构会造成根本性差异,以下讨论都是针对这一点说的。任何一种程序,它所包含的逻辑功能大致和源码规模是相关的。任何一种实用性的语言都不可能比Lua的源码规模更小,而且未来Lua也不会变大很多,原因是——Lua严格限制了自己要解决的问题,从而把语言特性限制在一个非常有限的范围之内。其实要说Python等其它动态语言,谁也没想让自己变得臃肿(又不是Windows),但是事情并不总能按照想象的发展。


共 1/1 页

0

帖子

0

回复

0

积分
最后登录:
1970-01-01 08:00
注册时间:
1970-01-01 08:00
会员必须登录才能发布帖子! 点击登录