記錄第一次寫Unity Mod的過程
這次的目標遊戲是戴森球計畫,以後簡稱為DSP
關於MOD製作詳細教學可以看以下的連結
我自己對Unity和C#瞭解不深,所以寫的東西看看就好
官方文件
BepInEx : https://docs.bepinex.dev/
英文教學
Risk of Rain 2 Mod : https://github.com/risk-of-thunder/R2Wiki/wiki
中文教學
宵夜97的專欄系列 : https://www.bilibili.com/read/cv8997376
1. 安裝BepInEx框架
首先先下載BepInEx的穩定版本
windows開工作管理員檢查遊戲名稱,後面有(32bits)選x86,反之選x64
DSP是64bit的,因此下載BepInEx x64的版本
解壓縮後會有1個資料夾和3個檔案
將這些放到steam遊戲的安裝資料夾
例:C:/Program Files (x86)/Steam/steamapps/common/Dyson Sphere Program
然後執行遊戲一次
成功之後BepInEx資料夾內會出現core之外的其他資料夾
之後安裝插件就把.dll或含有.dll的整個資料夾放到\BepInEx\plugins就可以了
2. 安裝.NET反編譯器(dnSpy/dotPeek)
將(遊戲資料夾)/DSPGAME_Data/Managed/Assembly-CSharp.dll丟進去反組譯
這樣就可以看遊戲的code
如果不想要看到Token可以把下面的選項取消勾選
View > Options > Decomplier > Show tokens, RVA and file offsets
3. BepInEx的Debug相關設定和插件
BepInEx.cfg
修改BepInEx/config/BepInEx.cfg顯示除錯訊息,方便debug
這裡有一個改好的.cfg檔 可以參考
ScriptEngine可以讓我們不用重開遊戲就能測試MOD
安裝後,遊戲中按下F6就可以熱重載BepInEx\scripts裡面的.dll
UnityExplorer可以讓我們查看遊戲物件
下載UnityExplorer.BIE5.Mono.dll放到BepInEx\plugins中完成安裝
F7打開/關閉介面
4. 其他工具
將.dll中的成員通通設為public,這樣就不必通過Reflect來存取private成員
將目標dll拖曳到AssemblyPublicizer.exe就會在publicized_assemblies/下產生公開化的dll
使用公開化的dll要在專案設定中把建置>"允許不安全的程式碼"打開
否則運行時存取私有成員會跳出存取違規錯誤
比較兩個dll的不同
在遊戲更新時用來檢查哪些地方有更動