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(&#34;Driven Static Func, BSF = &#34; + BaseClass.BSF);
}
public void BMFunc()
{
if (BaseClass.__Hitfix0_BMFunc != null)
{
BaseClass.__Hitfix0_BMFunc(this);
return;
}
Debug.Log(&#34;Driven Member Func, BMF = &#34; + 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 方案感兴趣么。