maltadirk 发表于 2021-4-7 09:38

1个bug 改两遍?

acecase 发表于 2021-4-7 09:40

如果前期项目已经规划好热更方案,用ulua slua xlua区别不大。
xlua 热补丁方案,我觉得是很好的feature, 很适合已经上线或者快完成,需要hotfix的项目,相对工作量较小。
比较期待作者性能测试报告..
转载:
腾讯开源手游热更新方案:Unity3D下的XLua技术内幕(一)_Gad-腾讯游戏开发者平台

Baste 发表于 2021-4-7 09:41

这是几个意思,不能热更过ios审核,直说,何必遮遮掩掩





RhinoFreak 发表于 2021-4-7 09:50


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

franciscochonge 发表于 2021-4-7 09:56

如真介绍说的那样,终于可以不用纠结用ulua还是slua了

Mecanim 发表于 2021-4-7 10:05

前期项目帮xlua踩过好多坑啊
(╯‵□′)╯︵┻━┻
不过现在终于完善了
~\(≧▽≦)/~啦啦啦
作为第一批用户(小白鼠)同样感到很开心

Ylisar 发表于 2021-4-7 10:07

技术上看,js c#等动态语言都可以热更新,使用便利度也比lua好上百倍,仅仅是因为平台不封杀lua热更而别扭地植入lua其实是一种极其低效的做法

xiangtingsl 发表于 2021-4-7 10:11

大家可以去关注上海合宙通信的Luat开源项目,物联网开源的开拓者

APSchmidt 发表于 2021-4-7 10:18

又是一个在unity而非c#环境下的lua,unity以外的C#都快被人遗忘了

FeastSC 发表于 2021-4-7 10:21

昨天看到的,喵了眼几个关键代码,就没兴趣了。
今天想起来还是正儿八经来看一眼吧。
不喜勿怪,个人感受,轻拍。
首先,这方案是个人所认可的。
先看几个热更方案。
1.纯lua,个人实在不喜欢脚本。环境ide,调试之类的都不高效。
2.jsb方案,在他们群里呆着,没用,感觉还好,不过因为全转换,有框架代码转换不变。
3.l# ilruntime,想法不错,不过,il解释器这么大,确定那么点代码能搞定?
4.xlua,aop方案,个人认可的,也平时在用,不过没在热更上。

由于个人不参与lua 所以就不评论lua 部分了,光看看这边的实现。原始代码

   
    public class BaseClass
    {

      public static void RunTest( int x)
      {
            x = 0;
      }

      public static void BSFunc()
      {
            Debug.Log("Driven Static Func, BSF = "+ BSF);
      }

      public static int BSF = 1;

      public void BMFunc()
      {
            Debug.Log("Driven Member Func, BMF = " + BMF);
      }

      public int BMF { get; set; }
    }处理后代码
       
        public class BaseClass
        {
                public static int BSF = 1;

                private static __Gen_Hotfix_Delegate0 _c__Hitfix0_ctor;

                private static __Gen_Hotfix_Delegate14 __Hitfix0_RunTest;

                private static __Gen_Hotfix_Delegate15 __Hitfix0_BSFunc;

                private static __Gen_Hotfix_Delegate0 __Hitfix0_BMFunc;

                private static __Gen_Hotfix_Delegate16 __Hitfix0_get_BMF;

                private static __Gen_Hotfix_Delegate17 __Hitfix0_set_BMF;

                public int BMF
                {
                       
                        get
                        {
                                if (BaseClass.__Hitfix0_get_BMF != null)
                                {
                                        return BaseClass.__Hitfix0_get_BMF(this);
                                }
                                return this.<BMF>k__BackingField;
                        }
                       
                        set
                        {
                                if (BaseClass.__Hitfix0_set_BMF != null)
                                {
                                        BaseClass.__Hitfix0_set_BMF(this, value);
                                        return;
                                }
                                this.<BMF>k__BackingField = value;
                        }
                }

                public BaseClass()
                {
                        if (BaseClass._c__Hitfix0_ctor != null)
                        {
                                BaseClass._c__Hitfix0_ctor(this);
                        }
                        base..ctor();
                }

                public static void RunTest(int x)
                {
                        if (BaseClass.__Hitfix0_RunTest != null)
                        {
                                BaseClass.__Hitfix0_RunTest(x);
                                return;
                        }
                        x = 0;
                }

                public static void BSFunc()
                {
                        if (BaseClass.__Hitfix0_BSFunc != null)
                        {
                                BaseClass.__Hitfix0_BSFunc();
                                return;
                        }
                        Debug.Log("Driven Static Func, BSF = " + BaseClass.BSF);
                }

                public void BMFunc()
                {
                        if (BaseClass.__Hitfix0_BMFunc != null)
                        {
                                BaseClass.__Hitfix0_BMFunc(this);
                                return;
                        }
                        Debug.Log("Driven Member Func, BMF = " + this.BMF);
                }
        }补丁代理部分
       
        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 方案感兴趣么。
页: 1 [2] 3
查看完整版本: 如何评价腾讯在Unity下的xLua(开源)热更方案?