Hotfix是如何被驱动的

在LoadHotfixAssembly() 中,首先从本地加载dll文件,然后对IStaticMethod start对象进行赋值,赋值的内容为Hotfix中Init类及Start函数

那么我们进MonoStaticMethod类中看看究竟发生了什么

构造函数中保存了Init类中Start函数的MethodInfo
创建了一个和函数参数长度一样的object[] param 来进行参数传递

在下面还有很多Run方法,接下来我们找一下这里的Run到底是在哪里执行的

在Hotfix中很容易就发现了这个函数

这里的Run 和Start函数最开始很容易搞混,读了一段时间源码才搞明白为什么这么命名

Mono 订阅 Hotfix 中的事件

首先,我们在Unity项目中的Hotfix类中,可以看到猫大定义的三个Action,这3个Action在Init类中由对应的Update、LateUpdate、OnApplicationQuit来驱动

我们可以看到,在每一个函数中都会有Hotfix.xxx.Invoke(),这里实现Unity层和Hotfix层的事件Invoke

下面转移到Hotfix层的Init类中,我们可以看到,在Start函数最开始的时候就对这3个事件进行了注册

如果System需要使用上诉调用,继承对应名字的抽象类即可

Hotfix 订阅 Mono 中的事件

这个就非常简单啦~ 猫大已经给我们写好了例子,我们对着例子做一个就好了

只看事件名就知道这个事件是干嘛的了

Hotfix 中的事件回调

这里需要注意的是,EventIdType类是ETModel下的

看到这里我还是不明白为什么Hotfix 就把Mono中的事件给订阅了,直到我在翻看EventSystem中的构造函数时,发现了两行关键代码

如果不是猫大的注释,这里还是需要花一些时间阅读才能找到是怎样完成订阅的

UI逻辑入口

之前在看初见大佬录的视频中,提到了UI逻辑的入口,更改对应的UI 引用即可,但是却没有说入口的位置

这里可以看到上面注释的代码是ET Demo中UI的入口