Unity Il2cpp 游戏的 Mod 制作教程03 - HelloWorld
2023-04-17 23:50 作者:Turing1337 | 我要投稿
一切准备就绪,让我们来写一个hello world吧。
插件的入口点
首先是继承了 BasePlugin
的类,也就是插件的入口点,Load
会被 BepInEx 调用。与mono 游戏的插件不同,BasePlugin
并不是 MonoBehaviour
的派生类,也就没有 Update
之类的接口。因此如果我们想要用到 mono 组件,比如创建一个UI,接受用户输入,或者动态加载资源等等, 就需要创建自己的 mono object 。但如果你只是想要用harmony去patch一些函数,那就不需要这些操作了。
需要注意的是,如果过早的创建mono object 会导致无法将其加入到第一个Scene 中。所以我们不能直接在 Load
中创建 mono object,而应该在一个合适的时间点来加载Mod。
下面给出两个思路:
Unity游戏一般都会有 CanvasScaler 组件,且会在
OnEnable
时调用Handle
,所以可以通过 hookHandle
来创建 mono object。将创建任务绑定到 SceneManager.sceneLoaded Event,并在创建时解除绑定。
Mono Object 类
如上所述,我们需要一个 MonoBehaviour
对象来实现丰富的功能。
代码写完开始编译,如果之前修改了项目配置,那么生成的插件 dll 会自动拷贝到 plugins 下,否则,需要我们手动拷贝。

运行游戏来看一下效果。如果成功的话我们每按一次 Tab 就会在命令行输出一次 Hello World!。
