找回密码
 立即注册
楼主: fwalker

[笔记] 如何评价腾讯在Unity下的xLua(开源)热更方案?

[复制链接]
发表于 2021-4-7 09:38 | 显示全部楼层
1个bug 改两遍?
发表于 2021-4-7 09:40 | 显示全部楼层
如果前期项目已经规划好热更方案,用ulua slua xlua区别不大。
xlua 热补丁方案,我觉得是很好的feature, 很适合已经上线或者快完成,需要hotfix的项目,相对工作量较小。
比较期待作者性能测试报告..
转载:
腾讯开源手游热更新方案:Unity3D下的XLua技术内幕(一)_Gad-腾讯游戏开发者平台
发表于 2021-4-7 09:41 | 显示全部楼层
这是几个意思,不能热更过ios审核,直说,何必遮遮掩掩





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-4-7 09:50 | 显示全部楼层

在不影响开发和执行效率的情况下, 又能解决hotfix,牛逼。不知道易用性怎么样,待踩坑。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-4-7 09:56 | 显示全部楼层
如真介绍说的那样,终于可以不用纠结用ulua还是slua了
发表于 2021-4-7 10:05 | 显示全部楼层
前期项目帮xlua踩过好多坑啊
(╯‵□′)╯︵┻━┻
不过现在终于完善了
~\(≧▽≦)/~啦啦啦
作为第一批用户(小白鼠)同样感到很开心
发表于 2021-4-7 10:07 | 显示全部楼层
技术上看,js c#等动态语言都可以热更新,使用便利度也比lua好上百倍,仅仅是因为平台不封杀lua热更而别扭地植入lua其实是一种极其低效的做法
发表于 2021-4-7 10:11 | 显示全部楼层
大家可以去关注上海合宙通信的Luat开源项目,物联网开源的开拓者
发表于 2021-4-7 10:18 | 显示全部楼层
又是一个在unity而非c#环境下的lua,unity以外的C#都快被人遗忘了
发表于 2021-4-7 10:21 | 显示全部楼层
昨天看到的,喵了眼几个关键代码,就没兴趣了。
今天想起来还是正儿八经来看一眼吧。
不喜勿怪,个人感受,轻拍。
首先,这方案是个人所认可的。
先看几个热更方案。
1.纯lua,个人实在不喜欢脚本。环境ide,调试之类的都不高效。
2.jsb方案,在他们群里呆着,没用,感觉还好,不过因为全转换,有框架代码转换不变。
3.l# ilruntime,想法不错,不过,il解释器这么大,确定那么点代码能搞定?
4.xlua,aop方案,个人认可的,也平时在用,不过没在热更上。

由于个人不参与lua 所以就不评论lua 部分了,光看看这边的实现。原始代码
  1.   [LuaCallCSharp]
  2.     [Hotfix]
  3.     public class BaseClass
  4.     {
  5.         public static void RunTest( int x)
  6.         {
  7.             x = 0;
  8.         }
  9.         public static void BSFunc()
  10.         {
  11.             Debug.Log("Driven Static Func, BSF = "+ BSF);
  12.         }
  13.         public static int BSF = 1;
  14.         public void BMFunc()
  15.         {
  16.             Debug.Log("Driven Member Func, BMF = " + BMF);
  17.         }
  18.         public int BMF { get; set; }
  19.     }
复制代码
处理后代码
  1.         [Hotfix(HotfixFlag.Stateless), LuaCallCSharp(GenFlag.No)]
  2.         public class BaseClass
  3.         {
  4.                 public static int BSF = 1;
  5.                 private static __Gen_Hotfix_Delegate0 _c__Hitfix0_ctor;
  6.                 private static __Gen_Hotfix_Delegate14 __Hitfix0_RunTest;
  7.                 private static __Gen_Hotfix_Delegate15 __Hitfix0_BSFunc;
  8.                 private static __Gen_Hotfix_Delegate0 __Hitfix0_BMFunc;
  9.                 private static __Gen_Hotfix_Delegate16 __Hitfix0_get_BMF;
  10.                 private static __Gen_Hotfix_Delegate17 __Hitfix0_set_BMF;
  11.                 public int BMF
  12.                 {
  13.                         [CompilerGenerated]
  14.                         get
  15.                         {
  16.                                 if (BaseClass.__Hitfix0_get_BMF != null)
  17.                                 {
  18.                                         return BaseClass.__Hitfix0_get_BMF(this);
  19.                                 }
  20.                                 return this.<BMF>k__BackingField;
  21.                         }
  22.                         [CompilerGenerated]
  23.                         set
  24.                         {
  25.                                 if (BaseClass.__Hitfix0_set_BMF != null)
  26.                                 {
  27.                                         BaseClass.__Hitfix0_set_BMF(this, value);
  28.                                         return;
  29.                                 }
  30.                                 this.<BMF>k__BackingField = value;
  31.                         }
  32.                 }
  33.                 public BaseClass()
  34.                 {
  35.                         if (BaseClass._c__Hitfix0_ctor != null)
  36.                         {
  37.                                 BaseClass._c__Hitfix0_ctor(this);
  38.                         }
  39.                         base..ctor();
  40.                 }
  41.                 public static void RunTest(int x)
  42.                 {
  43.                         if (BaseClass.__Hitfix0_RunTest != null)
  44.                         {
  45.                                 BaseClass.__Hitfix0_RunTest(x);
  46.                                 return;
  47.                         }
  48.                         x = 0;
  49.                 }
  50.                 public static void BSFunc()
  51.                 {
  52.                         if (BaseClass.__Hitfix0_BSFunc != null)
  53.                         {
  54.                                 BaseClass.__Hitfix0_BSFunc();
  55.                                 return;
  56.                         }
  57.                         Debug.Log("Driven Static Func, BSF = " + BaseClass.BSF);
  58.                 }
  59.                 public void BMFunc()
  60.                 {
  61.                         if (BaseClass.__Hitfix0_BMFunc != null)
  62.                         {
  63.                                 BaseClass.__Hitfix0_BMFunc(this);
  64.                                 return;
  65.                         }
  66.                         Debug.Log("Driven Member Func, BMF = " + this.BMF);
  67.                 }
  68.         }
复制代码
补丁代理部分
  1.         [HotfixDelegate]
  2.         public delegate void __Gen_Hotfix_Delegate0(object p0);
复制代码
嗯,首先是使用感受。
1.集成度还好,至少没感觉到什么问题。
2.pdb修改不友好,没行号,git上说了,这个差评。
3.lua方案不做评论

没细用,不好多说,在此基础上稍微展望下。
1.补丁需要预打入,这个我知道哪里可能报错还需要补丁干嘛。干脆全打么,排除几个名字空间。
2.效率,aop效率不说,如果这么点效率能换来热更,大部分人还是愿意接收的。
3.规模,小规模补丁肯定没问题,大规模也有人说了,这个蛋疼了。
4.开发期无痛点,这个是我一直想要的,为了热更的成本太高,项目砍了那是常态。
5.介于现在没有完美的c#to lua 方案,我觉得热更规模还是较低,不如隔壁的jsb版本,强力安利这种方案给jsb作者中。

题外,这种小规模热更,个人更喜欢无导入型的脚本嵌入,要做的只要嵌入个脚本引擎,并且有访问权限即可,无需乱七八糟的生成,交互,既然是热更了 效率一般也就不一定在考虑范围内,如果能更高那自然更好。
ps:有人最 aop+jint 方案感兴趣么。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-22 12:21 , Processed in 0.097825 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表