Unity Il2cpp 游戲的 Mod 制作教程03 - HelloWorld
一切準(zhǔn)備就緒,讓我們來(lái)寫(xiě)一個(gè)hello world吧。
插件的入口點(diǎn)
首先是繼承了 BasePlugin
的類(lèi),也就是插件的入口點(diǎn),Load
會(huì)被 BepInEx 調(diào)用。與mono 游戲的插件不同,BasePlugin
并不是 MonoBehaviour
的派生類(lèi),也就沒(méi)有 Update
之類(lèi)的接口。因此如果我們想要用到 mono 組件,比如創(chuàng)建一個(gè)UI,接受用戶(hù)輸入,或者動(dòng)態(tài)加載資源等等, 就需要?jiǎng)?chuàng)建自己的 mono object 。但如果你只是想要用harmony去patch一些函數(shù),那就不需要這些操作了。
需要注意的是,如果過(guò)早的創(chuàng)建mono object 會(huì)導(dǎo)致無(wú)法將其加入到第一個(gè)Scene 中。所以我們不能直接在 Load
中創(chuàng)建 mono object,而應(yīng)該在一個(gè)合適的時(shí)間點(diǎn)來(lái)加載Mod。
下面給出兩個(gè)思路:
Unity游戲一般都會(huì)有 CanvasScaler 組件,且會(huì)在
OnEnable
時(shí)調(diào)用?Handle
,所以可以通過(guò) hookHandle
來(lái)創(chuàng)建 mono object。將創(chuàng)建任務(wù)綁定到 SceneManager.sceneLoaded Event,并在創(chuàng)建時(shí)解除綁定。
Mono Object 類(lèi)
如上所述,我們需要一個(gè) MonoBehaviour
對(duì)象來(lái)實(shí)現(xiàn)豐富的功能。
代碼寫(xiě)完開(kāi)始編譯,如果之前修改了項(xiàng)目配置,那么生成的插件 dll 會(huì)自動(dòng)拷貝到 plugins 下,否則,需要我們手動(dòng)拷貝。

運(yùn)行游戲來(lái)看一下效果。如果成功的話(huà)我們每按一次 Tab 就會(huì)在命令行輸出一次 Hello World!。
