InjectFix 代码热更

InjectFix 是腾讯最近刚开源的新的热更方案,XLua的升级版。无需写Lua代码。可以直接在Unity工程上修改C#即可更新,老项目无需修改原有代码即可使用。符合苹果热更新条款。

下载地址:https://github.com/Tencent/InjectFix

下载解压后,找到VSProj 文件夹下的

打开编辑,修改UNITY_HOME变量的值修改为指向本机unity安装目录

保存之后 ,双击bat文件。运行成功后在UnityProj文件夹下的plugins 文件夹下会有一个IFix.Core.dll文件。

将下载的UnityProj 下面的IFixToolKit 文件夹 拷贝到项目工程 和Assets 同级目录下。

以及这两个文件夹放到Assets下。

创建一个自己工程的热更配置类,IFix\Editor文件夹下。对热更的类进行预处理。

下面是对某个命名空间下所有类型(除了匿名类),动态配置方式,省去一个个配。

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

创建示例Demo

namespace MyGame
{
    public class TestScr : MonoBehaviour
    {

        private void Start()
        {
            this.GetComponent<MeshRenderer>().material.color = Color.cyan;
        }

        private void Update()
        {
            transform.Rotate(Vector3.up, Time.deltaTime * 360);
        }

    }
}

让一个Cube 一开始 改变颜色,并旋转。此时我们想要修改一开始的颜色,并且旋转速度 也不需要那么快。

我们使用InjectFix 来修改。

namespace MyGame
{
    public class TestScr : MonoBehaviour
    {
        [Patch]
        private void Start()
        {
            //this.GetComponent<MeshRenderer>().material.color = Color.cyan;
            this.GetComponent<MeshRenderer>().material.color = Color.red;
        }
        [Patch]
        private void Update()
        {
            // transform.Rotate(Vector3.up, Time.deltaTime * 360);
            transform.Rotate(Vector3.up, Time.deltaTime * 45);
        }

    }
}

修改之后 此时 我们要生成 我们的补丁包,方便后续加载。

此时代表补丁文件生成成功。

将其复制到Editor-->Resources 下面即可。该路径可修改

此时新建 热更管理类,用于热更管理

public class HotFixManager : MonoBehaviour
{
    string patchPath = "./Assets/IFix/Resources/Assembly-CSharp.patch.bytes";
    private void Awake()
    {
        if (File.Exists(patchPath))
        {
            PatchManager.Load(new FileStream(patchPath, FileMode.Open));
        }
    }
}

此时将代码 回退到线上版本(有问题的版本),执行Inject。

此时运行Unity。效果 已经是修改过代码之后的 

原先代码 是

删除热更文件,回退到原先版本。

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值