同步操作将从 腾讯开源/InjectFix 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
判断有补丁就加载补丁
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);
}
}
}
划下重点:
动态配置除了不用一个个配,还可能有其它额外好处,比如上述配置,后续该名字空间下增删类,都不需要更改配置。
配置好后,打包手机版本会自动预处理,如果希望自动化打包,也可以手动调用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]
public void Job(int a)
{
#if UNITY_EDITOR
Foo();
#endif
#if !UNITY_EDITOR
Bar();
#endif
}
如果还是直接在编辑器下直接生成补丁,将会比手机上运行多调用了个Foo,少调用了个Bar,这可能会导致各种问题:逻辑不对,调用了编辑器专用函数而导致找不到要调用的函数等等。
这种情况请按FAQ的《补丁制作的条件编译宏如何处理》处理。
上面的使用流程,补丁是要在手机上加载,如果你想在编辑器下快速体验一下iFix的热补丁能力,可以看下这个文档:《编辑器下体验热补丁》
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。