【InjectFix】04 官方案例

本文档详细介绍了如何使用IFix工具在Unity中修复代码错误。首先,通过运行Helloworld场景展示错误的Calc.cs。接着,配置IFix,指定需要预处理的代码类型。在修复代码并打上Patch标签后,执行InjectFix/Fix生成补丁文件。最后,通过回滚代码,模拟线上问题版本,并应用补丁,验证修复效果。整个过程包括Inject和Fix两个步骤,确保代码修复和热更新的顺利进行。
摘要由CSDN通过智能技术生成

以配套的Helloworld为例,编辑器下演示IFix的使用

一、准备工作

Helloworld位于IFix目录下

其中Calc.cs就是待修复的代码,Helloworld.cs是Calc.cs的测试。

运行一下Helloworld的场景,看下控制台的打印,可以看到Calc.cs是错误的。

二、配置

和xLua类似,你得配置下要预处理的代码,预处理过的代码才可能在运行时切换到补丁代码。

[Configure]
public class HelloworldCfg
{
    [IFix]
    static IEnumerable<Type> hotfix
    {
        get
        {
            return new List<Type>()
            {
                typeof(IFix.Test.Calculator)
            };
        }
    }
}

说明下:

1、这配置必须放在Editor目录下(例子的配置位于Helloworld/Editor目录下);
2、写配置的类需要打上Configure标签,属性必须打IFix标签并且声明为 static
3、属性返回一个IEnumerable&lt;Type&gt;即可,由于Helloworld只需要简单的返回个List,因为这是个getter,你可以用linq+反射很方便的把大量的类给配上,例如你要一次加入XXX命名空间下所有类,可以这样:

[Configure]
public class HelloworldCfg
{
    [IFix]
    static IEnumerable<Type> hotfix
    {
        get
        {
            return (from type in Assembly.Load("Assembly-CSharp").GetTypes()
                    where type.Namespace == "XXXX"
                    select type).ToList();
        }
    }
}

三、流程说明

有两个步骤:Inject,Fix。

实际应用中,Inject只需在发包时做一次,这个步骤主要是对代码做一定的预处理,只有做了预处理的代码后续才能正常加载补丁。

Fix的过程是根据修改后的代码编译后的dll,生成补丁。

修改代码和Fix之间别执行Inject,否则iFix会认为这是个线上版本,拒绝生成补丁。鉴于这个限制,我们编辑器下体验流程上做一定的调整:先修改代码为正确逻辑,生成patch。然后回退代码,执行Inject模拟线上有问题的版本。

四、修复代码、生成patch

打开Calc.cs,修改为正确的逻辑,为将要生成patch的函数打上Patch标签(为了做对比,案例只为Add函数打Patch标签)

执行"InjectFix/Fix"菜单

看到process success打印表示已经处理成功。我们可以在项目根目录下找到Assembly-CSharp.patch.bytes文件,这就是补丁文件。

五、看看效果

回滚对Add为错误逻辑,执行"InjectFix/Inject"菜单(只有注入过的版本才能加载补丁)。然后运行,可以看到Add此时为错误逻辑,然后把Assembly-CSharp.patch.bytes拷贝到\Assets\IFix\Resources下,重新执行,可以看到已经修复到新逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack Yan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值