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。效果 已经是修改过代码之后的
原先代码 是
删除热更文件,回退到原先版本。
上一篇: Mybatis快速入门
下一篇: InjectFix 热更新使用记录