你知道的越多,你不知道的越多 🇨🇳🇨🇳🇨🇳
点赞再看,养成习惯,别忘了一键三连哦 👍👍👍
文章持续更新中 📝📝📝


1️⃣前言🔥🔥🔥

Lua热更新主要由三部分组成:
1、C# 与 Lua 的互相调用机制;
2、Lua 文件的打包;
3、网络传输,校验。

当前Unity在手游平台主要的热更新方式Lua、ILRuntime。其中Lua热门的方案就是Tolua、Xlua及Slua。

XLua , ToLua , ULua都只是提供了 C# 与 Lua 的互相调用机制,差别基本就是少量的语法差别。


1️⃣每次修改c# 代码 xlua 无需生成代码, tolua 需要生成代码?🔥🔥🔥

🔑原理

tolua:c# 代码静态注册到lua代码中
xlua:在编辑器模式下使用TypeBuilder,IlEmit,动态生成接口的C#代码,避免了每次新注册或者改变导入类时,都需要生成代码并加载。最后在实际发布中需要生成代码

🔑注意点

但是需要加XLua.LuaCallCSharp or XLua.ReflectionUse(如果发布的时候没有生成代码的话)
建议所有要在Lua访问的类型,要么加LuaCallCSharp,要么加上ReflectionUse,这才能够保证在各平台都能正常运行。

🔑结论

在实际项目中,确实经常由于未运行代码生成菜单,导致一些编译或运行错误。如果项目逻辑主要使用lua开发,并不设计到频繁的互操作的话,此问题有所缓解


2️⃣xLua支持热补丁?🔥🔥🔥

1、开发只用C#;
2、运行也是C#,性能可以秒杀lua;
3、出问题了才用Lua来改掉C#出问题的部位,下次整体更新时换回正确的C#;能做到用户不重启程序fix bug;

🔑原理
热补丁的基本原理其实非常简单,了解后任何程序员都很容易分析出开销,比如对于这个类

[hotfix]
public class Calc
{
   int Add(int a, int b)
   {
        return a + b
   }
}

打了hotfix标签后,xLua会在il层面注入代码(触发编译后),注入之后这个类会类似这样:

public class Calc
{
    static Func<object, int, int, int> hotfix_Add = null;
    int Add(int a, int b)
   {
        if (hotfix_Add != null) return hotfix_Add(this, a, b);
        return a + b
   }
}

如果lua中执行了hotfix调用,hotfix_Add会指向一个lua的适配函数。

xlua.hotfix(CS.Calc, 'Add', function(a, b)
        print('Update in lua')
end)

3️⃣复杂类型传递无GC?🔥🔥🔥

isssue
struce/class 映射只支持int类型
请问 hotfix 子类中重载父类的方法

父类中有个 :
public virtual void Awake()
{
    Debug.Log("name" + gameObject.name);
}
子类中重载:
public override void Awake()
{
    base.Awake();
    Debug.Log("testpanel awake===");
}
我在hotfix 这个子类的Awake时:
    xlua.hotfix(CS.TestPanel, 'Awake', function()
        print('<<<<<<<<Awake in lua')
    end)
这里,有什么办法还可以执行到父类的Awake。
目前没提供。。hotfix的话,你把父类逻辑也在lua实现就可以了。
就是在hotfix的时候把父类的这个方法里面的逻辑也写到Lua里面?以后会有提供么?
想了下,貌似很难用很常规的办法提供。

4️⃣是否有丰富的库?🔥🔥🔥

tolua 因为早期的沉淀如Luaframework这种框架 所以开发起来可以直接用而不用自己再从头弄一些轮子, 相比之下xlua精简了不少, 需要自己花费一定的时间造轮子


🎁🌻🌼🌸 粉丝福利来喽 🎁🌻🌼🌸

  1. 免费领取海量资源 🎁
    简历自测评分表、Unity职级技能表、面试题库、入行学习路径等
  2. 《Unity游戏开发五天集训营 》50个名额 🎁
    我给大家争取到了 50个《游戏开发五天集训营 》名额,原价198,前50个免费
    扫码加入,暗号小听歌
    即可参加ARPG狼人战斗系统、饥荒生存类游戏开发、回合制RPG口袋妖怪游戏等游戏开发训练营
  3. 额外抽奖机会🎁
    参加游戏训练营、还有机会获得大厂老师在线面试指导、或者有机会获得价值1998元的《Unity极速入门与实战》课程
🔻🔻🔻🔻 扫下方二维码,获取游戏开发福利,暗号小听歌 🔻🔻🔻🔻
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐