V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Game Engines
Unreal Engine
MyCryENGINE
drymonfidelia
V2EX  ›  游戏开发

为什么国内的手游公司这么爱用 Lua 搞热更,国外的公司很少用?

  •  1
     
  •   drymonfidelia · 7 天前 · 6391 次点击
    47 条回复    2025-01-27 22:17:08 +08:00
    guyeu
        1
    guyeu  
       7 天前   ❤️ 3
    一开始不是魔兽世界带起来的么,属于舶来品。。。
    Gilfoyle26
        2
    Gilfoyle26  
       7 天前
    貌似好像看过之前有一个文章说过。用 lua 的初衷是为了防止被破解。后来就成了大家都会用的。
    ugpu
        3
    ugpu  
       7 天前
    首先时代背景:
    科班程序员 有设计 架构能力的程序员很少.
    培训班比比皆是

    然后:
    设计能力的程序开发了一套框架 离职后学葫芦画瓢的比比皆是.也不知道为什么 反正直接运行.

    最后:
    Lua 在上古时代方便热更 简单 双端开发公司成本低 应届生都能快速学会.
    1. 成本低廉 不需要管计算机技术 双端开发 只要写业务就行
    2. 魔兽世界上古代码可以抄袭 魔兽世界是游戏界的起源. 你能在市面上看到的功能 ta 都有

    离职 & 交互 & 入住新公司 & 热更
    全部开始使用 抄袭. 游戏是 沪浙开始大面积出现开发公司做页游
    随后广东开始新启
    drymonfidelia
        4
    drymonfidelia  
    OP
       7 天前
    @Gilfoyle26 Lua 不是更容易逆向,为什么可以防破解?
    sunny352787
        5
    sunny352787  
       7 天前   ❤️ 6
    主要因为热更是刚需,不用 lua ,用 js 或者 C#也都可以,只是 lua 的教程多,现在的主程们水平又都不咋地所以当小弟时用啥升级了就继续用,就类似为什么国内之前用 CentOS 的多是因为有个叫鸟哥的出的 linux 教程教的 CentOS ,没有什么高大上的理由,就这么简单
    m1nm13
        6
    m1nm13  
       7 天前
    @sunny352787 怪不得。。。我说哪来的那么多 centos ,我咋从没听过
    iyaozhen
        7
    iyaozhen  
       7 天前
    @m1nm13 还有一部分原因是 centos 和 redhat 同源。有大公司背书。而且听说你实在有问题也可以给钱找 Redhat 付费解决
    sunny352787
        8
    sunny352787  
       7 天前 via Android
    @m1nm13 十多年前很火的,现在没听说过太正常了
    mooyo
        9
    mooyo  
       7 天前
    因为最早只有 lua 这套方案,没别的能用,最近有人又搓了一套 js 的,现在也有人用 js 了。
    mooyo
        10
    mooyo  
       7 天前
    @mooyo 就是纯粹的路径依赖
    levelworm
        11
    levelworm  
       7 天前 via Android
    Lua 不是很流行的游戏脚本语言吗?
    kk2syc
        12
    kk2syc  
       7 天前
    没有米家之前,在用单片机继电器/PLC 的时候,为了让家里人方便,我也是硬生生手搓了一套 lua 脚本热更的家居控制。
    jim9606
        13
    jim9606  
       6 天前 via Android
    纯粹路径依赖。
    热更方案有很多选择,lua js python 之类的都可以。lua 属于在大型商业项目(WoW)上用得早而且取得成功的。然后就是没问题就别动了。
    chendy
        14
    chendy  
       6 天前
    @guyeu +1 高中时候吭哧瘪肚研究怎么写宏,很多年后才知道那玩意是 lua
    Lynntox
        15
    Lynntox  
       6 天前
    @sunny352787 好几年前我也喜欢 CentOS 现在慢慢转 ubuntu
    mayli
        16
    mayli  
       6 天前
    lua 比起 py/js 主要是轻量级+快,集成到 c/c++很容易
    对于游戏公司,除了这个,应该就是路径依赖了。
    murmur
        17
    murmur  
       6 天前
    @drymonfidelia lua 解析器就三四百 kb ,你可以整个全重写,别人想逆向得闲逆向解析器,分析你的指令吗设计
    cyrivlclth
        18
    cyrivlclth  
       6 天前
    我很怀疑楼主说的国外手游不用 lua 热更的这个前提存不存在,因为 supercell 这种,也是用的 lua 热更。
    angryfish
        19
    angryfish  
       6 天前
    那请问国外用什么呢?
    dzdh
        20
    dzdh  
       6 天前
    @sunny352787 #5

    我一开始学 Linux 接触的是 RedHat Linux 9
    encro
        21
    encro  
       6 天前
    @sunny352787

    centos 那还得从红帽子开始说起。
    nightwitch
        22
    nightwitch  
       6 天前
    手游热更是刚需(不然 Apple / Google Play 重新发版的审核能等死人
    国内外都一样,只能说国外手游玩少了
    INCerry
        23
    INCerry  
       6 天前   ❤️ 1
    现在新项目手游热更用 lua 也开始少了,用 HybridCLR 的多起来了,直接 C#热更
    coderzhangsan
        24
    coderzhangsan  
       6 天前   ❤️ 1
    @sunny352787 centos 那完全是红帽子,当时服务器系统市场红帽子影响比较大,培养了一大堆红帽子运维工程师以及建立了相关培训认证体系,其社区免费版 centos 有这颗大树背书,推广起来就容易多了。
    ScepterZ
        25
    ScepterZ  
       6 天前
    我发现我都想不出来有什么国外手游,在国内貌似没什么火的
    iyiluo
        26
    iyiluo  
       6 天前
    和 mybatis 差不多吧,都是大公司开始用,然后国内中小公司也沿用了
    mxT52CRuqR6o5
        27
    mxT52CRuqR6o5  
       6 天前
    路径依赖+1 ,以前那个年代可没有 node.js 、quickjs ,当年没有太多的选择
    lua 和 python 一样可以很容易调用 C ,而又比 python 轻,具体的历史可以看看知乎上的一些回答
    https://www.zhihu.com/question/395593519
    https://www.zhihu.com/question/21717567
    CloveAndCurrant
        28
    CloveAndCurrant  
       6 天前
    魔兽先用的,后来云风学了在大话西游用 lua ,就在国内带火了。不过现在有 quickjs 了,JavaScript 比 lua 是一个不错的选择。
    Katrol
        29
    Katrol  
       6 天前
    路径依赖,而且用过 lua 热更都是久经考验了,游戏项目最重要的是稳定。就比如说做引擎、做图形的见到华为的设备都后怕,时不时都会碰到点毛病
    kingzeus
        30
    kingzeus  
       6 天前   ❤️ 1
    作为游戏开发人员来解释下:
    1. 游戏开发中很早就在用脚本了,用什么语言实现的都有,主要是提供了动态能力,一个是方便策划动态配置,也可以减少大量的编译时间。
    2. 之后随着互联网出现,游戏发行方式改变了,版本更新速度变快了,同时因为审核的不确定性,热更优先级就大大提高,所以脚本就越来越重要了

    说回,为什么用 lua
    1. lua runtime 非常小,执行效率高,支持嵌入,可以定制。对比其他脚本语言优势明显
    2. 还有一个很重要的点,热更的代码和非热更代码要隔离开,试过 C#热更就知道了,同一种语言实现一不注意就混在一起了。lua 和原生代码直接在语言层面上隔离了

    其他的都不是重点
    areless
        31
    areless  
       6 天前
    不止你说的手游公司,lua 在运维领域一直很火。只是 NODEJS 带走了黏合层编写的一部分流量。lua 编写简单。有了 luajit 后,速度又很快。nginx 、PostgreSQL 、Redis 等等大部分主流服务组件都支持 lua 去扩展。openresty 更是把 lua 提升到了高并发 web 编程语言的地位。lua 实现的网关有 kong ,还有 lua 也占领了 waf 等一些列细分领域。你别看互联网上 PHP JAVA PYTHON 语言诸多,大部分流量都是 lua 小脚本在扛着。有部署在 CDN 的,有部署在各个模块组件里面。
    Mutoo
        33
    Mutoo  
       6 天前 via iPhone
    国外很火的 Roblox 里的所有游戏都是用 Lua 写的。他们还自己实现了一个 LuaU 方言
    memorycancel
        34
    memorycancel  
       6 天前
    游戏的商店像 Apple Store, 用网页套壳做热更,不用每次都审核(哪怕修改了一行代码都需要重新审核). 游戏同理
    Yuanlaoer
        35
    Yuanlaoer  
       6 天前
    在过去的二十年前到三年前,除了魔兽世界和 Kong ,粗鄙的我并不知道还有哪里用 Lua 。楼上各位说的 Lua 的优点,麻烦您自己对比一下其他语言有没有类似的特性再说话。不少人都是在放 P ,不点名了。
    就好比说,问为什么用 Java 的人多,答因为 Java 面向对象一样。
    BppleMan
        36
    BppleMan  
       6 天前
    lua 的运行时很小,lua 可以 jit ,虽然现在的 js 运行时也可以 jit ,但要溯源早期,lua 优先占领了这块领域,主要是较丰富的基础设施
    me1onsoda
        37
    me1onsoda  
       6 天前
    用什么取决于哪个选型布道的多,看到网上哪个“大佬、大厂”用什么
    areless
        38
    areless  
       6 天前
    cloudflare 似乎仍用 lua 默默扛流量。阿里那些 tengine 不知道还有没有跑着 lua 脚本。
    lijiangang886
        39
    lijiangang886  
       6 天前
    路径依赖吧,有了成功的案例和经验教训为其背书,复用前人已验证的路线是更加稳妥的选择,即使这门语言就是拖史
    caNoN2019
        40
    caNoN2019  
       5 天前
    @Yuanlaoer 十年前的 cocos2dx 手游时代,基本 lua 和 js 各半壁江山
    Yuanlaoer
        41
    Yuanlaoer  
       5 天前
    Yuanlaoer
        42
    Yuanlaoer  
       5 天前
    @caNoN2019 多谢
    Yuanlaoer
        43
    Yuanlaoer  
       5 天前
    @lijiangang886 回复错了,不好意思
    darrh00
        44
    darrh00  
       5 天前 via iPhone
    上面提到 cdn 用的 lua ,让我想起 n 年前一个 0 引起 B 站宕机 3 小时的事件了,世界就是个草台班子 哈哈
    flyqie
        45
    flyqie  
       2 天前 via Android
    @Yuanlaoer #35

    tolua slua 再到最新的 xlua

    我的理解是用 lua 主要是做热更,.net 这块的热更其实并不好做。

    至于语言优势,我唯一的感觉就是 lua 轻量且简单,容易做 bridge 和嵌入。

    剩下的似乎没有什么非常明显的优势?
    flyqie
        46
    flyqie  
       2 天前 via Android
    @flyqie #45

    js 和 python 我都见过有用的,但是好像嵌入比较麻烦,要做很多工作,不过现在有很多框架能简便这个工作了。

    至于代码加密和性能优化,lua 比较好改,js 和 python 什么的因为语言特性比较丰富不太好改。

    .net 做热更我记得以前有前人搞过很多方案,但似乎都不太好搞,因为这个对 unity 依赖太大了,不注意的话可能会崩,而且 il2cpp 出现之后也确实导致了一些热更方案的淘汰,现在市面上在的 hybird 已经挺稳了,但是因为路径依赖,有些项目还是趋向用 lua 做开发。
    Yuanlaoer
        47
    Yuanlaoer  
       2 天前
    @flyqie 光是你提到的这些,在跟电脑相关的大行业下,已经不是小市场了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   696 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:07 · PVG 04:07 · LAX 12:07 · JFK 15:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.