腾讯开源的 Unity全系列 代码逻辑热修复方案--InjectFix

2019年09月14日08:52:10 科技 1510

腾讯开源的 Unity全系列 代码逻辑热修复方案--InjectFix - 天天要闻

InjectFix

腾讯开源的 Unity 代码逻辑热修复方案

Unity代码逻辑热修复

可用于Unity业务的bug修复,支持Unity全系列,全平台。

几个亮点

  • 直接在Unity工程上修改C#即可更新
  • 老项目无需修改原有代码即可使用
  • 每个游戏一份私有补丁格式,安全更有保障

编译安装

  • Window下打开源码包的Source\VSProj\build_for_unity.bat,UNITY_HOME变量的值修改为指向本机unity安装目录
  • 运行build_for_unity.bat

复制

这里对应的是一个Unity工程目录

  • IFixToolKit拷贝到Unity项目的Assets同级目录
  • Assets/IFix,Assets/Plugins拷贝到Unity项目的Assets下

接入示例

判断有补丁就加载补丁

var patchPath = "./Assets/IFix/Resources/Assembly-CSharp.ill.bytes";
if (File.Exists(patchPath))
{
PatchManager.Load(new FileStream(patchPath, FileMode.Open));
}

配置

热补丁的实现依赖于提前做些静态代码插入,所以需要配置对哪些类预处理,配置了才能被修复。一般而言,只要不是性能要求很苛刻的类都可以加入。

iFix支持动态和静态列表方式,由于类型往往比较多,动态列表会方便些。下面是一个实例,配置XLua名字空间下除匿名类之外的所有类型。

[Configure]
public class InterpertConfig {
[IFix]
static IEnumerable<Type> ToProcess
{
get
{
return (from type in Assembly.Load("Assembly-CSharp").GetTypes()
where type.Namespace == "XLua" && !type.Name.Contains("<")
select type);
}
}
}

划下重点:

  • 配置类打上Configure标签
  • 配置的属性打上IFix标签,而且必须是 static 类型

动态配置除了不用一个个配,还可能有其它额外好处,比如上述配置,后续该名字空间下增删类,都不需要更改配置。

配置好后,打包手机版本会自动预处理,如果希望自动化打包,也可以手动调用IFix.Editor.IFixEditor.InjectAllAssemblys函数。

补丁制作

对需要打补丁的函数打上Patch标签

[Patch]
public int Add(int a, int b)
{
return a + b;
}

执行"InjectFix/Fix"菜单。

补丁制作成功后会放到工程目录下,文件名为“{Dll Name}.patch.bytes”(比如:“Assembly-CSharp.patch.bytes”),上传补丁到手机,加载就能看到效果。

注意事项:如果要Patch的函数存在条件编译宏,比如这样的代码:

[Patch]
public void Job(int a)
{
#if UNITY_EDITOR
Foo();
#endif
#if !UNITY_EDITOR
Bar();
#endif
}

如果还是直接在编辑器下直接生成补丁,将会比手机上运行多调用了个Foo,少调用了个Bar,这可能会导致各种问题:逻辑不对,调用了编辑器专用函数而导致找不到要调用的函数等等。

这时可以按对应平台的编译参数把Assembly-CSharp.dll编译出来,然后调用IFix.Editor.IFixEditor.GenPatch去生成补丁。

Unity编译是在工程的Temp目录新建一个文件,把命令行参数放到那个文件,然后执行类似(目录根据自己的unity安装情况而定)如下命令进行编译:

"D:\Program Files\Unity201702\Editor\Data\MonoBleedingEdge\bin\mono.exe" "D:\Program Files\Unity201702\Editor\Data\MonoBleedingEdge\lib\mono\4.5\mcs.exe" @Temp/UnityTempFile-55a959adddae39f4aaa18507dd165989

你可以尝试一次编辑器下的手机版本打包,然后到工程目录下的Temp目录把那个临时文件拷贝出来(编译完会自动删掉,所以要手快)。

这个文件大多数地方都不会变的,变的主要是C#文件列表,可以改为动态生成这个文件:C#文件列表根据当前项目生成,其它保持不变。然后用这个文件作为输入来编译。

github地址:

https://github.com/tencent/injectfix

更多更优质的资讯,请关注我,你的支持会鼓励我不断分享更多更好的优质文章。

科技分类资讯推荐

马增荣会见宁德时代商用事业部执行副总裁莎仁其其格一行 - 天天要闻

马增荣会见宁德时代商用事业部执行副总裁莎仁其其格一行

2025年6月6日,中国物流与采购联合会副会长兼秘书长马增荣在京会见了来访的宁德时代商用事业部执行副总裁莎仁其其格一行。马增荣对莎仁其其格一行的到访表示欢迎,并对宁德时代在动力电池技术创新、循环经济实践及产业链协同发展中展现出的前瞻视野与责
围剿英伟达?华为、AMD一起抢市场,黄仁勋急得直跺脚? - 天天要闻

围剿英伟达?华为、AMD一起抢市场,黄仁勋急得直跺脚?

全球AI芯片老大英伟达最近在中国市场碰上了大麻烦。过去他们在中国跟在全球一样横着走,市场份额一度超过90%,现在直接腰斩到50%左右。这落差比过山车还刺激,背后原因说来也简单:美国政府卡脖子+中国厂商崛起,双管齐下把英伟达打得找不着北。先说
苹果专利曝光:或重塑智能眼镜未来格局 - 天天要闻

苹果专利曝光:或重塑智能眼镜未来格局

【环球网科技综合报道】6月6日,据外媒报道,美国专利商标局公布了苹果公司的一项创新专利申请,该申请涉及一种不使用摄像头的下一代眼动追踪系统。这一技术的出现,无疑为苹果未来智能眼镜和增强现实(AR)眼镜的发展注入了新的活力。在当前的眼动追踪技术中,摄像头往往扮演着至关重要的角色。然而,摄像头的使用也带来了...
演唱会追星必备:学生党如何挑选适合的手机 - 天天要闻

演唱会追星必备:学生党如何挑选适合的手机

对于学生来说,想要在演唱会上记录下精彩瞬间,一款性能出色且性价比高的手机是必不可少的。2025年6月,市场上有不少手机能够满足这一需求,帮助你在演唱会上尽情享受音乐的同时,拍出令人满意的照片和视频。首先,OPPO Find X7 Ultra
干昆智驾&amp;鸿蒙座舱双智加持!传祺向往M8干昆系列正式发布 - 天天要闻

干昆智驾&amp;鸿蒙座舱双智加持!传祺向往M8干昆系列正式发布

5月22日,第二十一届中国(深圳)国际文化产业博览交易会在深圳国际会展中心正式拉开帷幕。广汽集团携手华为、中央广播电视总台国重实验室,首次联合发布“人车家-文化科技引领未来生活态”。这不仅是广东展团在本届文博会推出的第一个重磅活动,更是一次用文化赋能产品,用产
生而全球:腾势N9第10000辆整车下线,让世界赞叹中国车 - 天天要闻

生而全球:腾势N9第10000辆整车下线,让世界赞叹中国车

2025年 3月21日,腾势N9汽车,正式上市。万万没有想到,消费者对腾势N9的欢迎程度,超过了预期。仅仅2个月,腾势第10000辆车下线。5月21日,腾势N9第10000辆整车。在比亚迪济南工厂正式下线。不得不说,腾势N9,属于划时代的巅峰之作,腾势N9成为
小米SU7交付超25万台,雷军:强大的产品力是高销量的基础 - 天天要闻

小米SU7交付超25万台,雷军:强大的产品力是高销量的基础

6月6日,@雷军发文称,小米SU7 已交付超过25万台。强大的产品力是高销量的基础,还有出色的品质和质量。小米汽车将持续倾听用户的声音、为用户交付具有吸引力的、高品质的产品。(来源:@雷军)更多精彩资讯请在应用市场下载“极目新闻”客户端,未经授权请勿转载,欢迎提供新闻线索,一经采纳即付报酬。24小时报料热线027...