發(fā):BepInEx框架部署與插件管理全攻略)
1. 項(xiàng)目概述為什么你需要BepInEx如果你是一個(gè)Unity游戲的深度玩家或者是一個(gè)對(duì)游戲模組Mod開(kāi)發(fā)感興趣的開(kāi)發(fā)者那么“BepInEx”這個(gè)名字對(duì)你來(lái)說(shuō)應(yīng)該不陌生。簡(jiǎn)單來(lái)說(shuō)BepInEx是一個(gè)用于Unity游戲的插件加載與運(yùn)行時(shí)框架。它的核心價(jià)值在于為那些沒(méi)有官方模組支持的游戲提供了一個(gè)穩(wěn)定、強(qiáng)大且相對(duì)安全的“后門(mén)”讓玩家和開(kāi)發(fā)者能夠注入自定義代碼、修改游戲邏輯、添加新功能從而極大地?cái)U(kuò)展游戲的可玩性和生命周期。你可能已經(jīng)厭倦了游戲里某個(gè)不合理的設(shè)定或者想添加一個(gè)夢(mèng)寐以求的功能又或者只是想看看游戲底層是如何運(yùn)作的。無(wú)論是《英靈神殿》Valheim里那些改變游戲體驗(yàn)的Mod還是《雨中冒險(xiǎn)2》Risk of Rain 2里那些眼花繚亂的額外內(nèi)容背后大多都有BepInEx的身影。它就像一個(gè)萬(wàn)能鑰匙為你打開(kāi)了修改和定制Unity游戲的大門(mén)。本指南的目的就是幫你繞過(guò)那些繁瑣的、容易出錯(cuò)的配置步驟用最快、最穩(wěn)的方式將BepInEx部署到你的目標(biāo)游戲中讓你能立刻開(kāi)始自己的模組之旅或開(kāi)發(fā)工作。2. 核心需求解析部署B(yǎng)epInEx前必須想清楚的事在興奮地下載文件之前有幾個(gè)關(guān)鍵問(wèn)題必須理清。這決定了你后續(xù)所有操作的路徑和可能遇到的坑。2.1 目標(biāo)游戲與Unity版本匹配BepInEx并非一個(gè)放之四海而皆準(zhǔn)的通用解決方案它的兼容性高度依賴(lài)于目標(biāo)游戲所使用的Unity引擎版本。BepInEx的核心是一個(gè)“注入器”它需要將自身代碼“注入”到游戲進(jìn)程的特定位置。不同版本的Unity其運(yùn)行時(shí)環(huán)境、內(nèi)存布局、程序集結(jié)構(gòu)都有差異。因此為Unity 2019.4開(kāi)發(fā)的BepInEx版本很可能無(wú)法在基于Unity 2021.3的游戲上運(yùn)行反之亦然。如何確認(rèn)查看游戲官方信息在Steam商店頁(yè)面、游戲官網(wǎng)或Wiki上有時(shí)會(huì)注明使用的引擎版本。使用工具分析可以借助如UnityEX或AssetStudio等工具打開(kāi)游戲資源文件查看其內(nèi)部信息。社區(qū)經(jīng)驗(yàn)最直接有效的方法。去該游戲的模組社區(qū)如Nexus Mods, GitHub, 相關(guān)的Discord頻道查找通常已經(jīng)有先驅(qū)者驗(yàn)證了兼容的BepInEx版本。直接使用社區(qū)推薦的版本能避免99%的兼容性問(wèn)題。注意盲目使用最新版的BepInEx不一定是最好的選擇。對(duì)于老游戲使用與其Unity版本時(shí)代相近的BepInEx穩(wěn)定版往往比追求新版本更可靠。2.2 32位x86與64位x64抉擇這是一個(gè)經(jīng)典的陷阱。很多玩家下載了BepInEx解壓運(yùn)行游戲卻發(fā)現(xiàn)沒(méi)有任何效果控制臺(tái)也沒(méi)彈出來(lái)問(wèn)題很可能就出在這里。你需要明確你的游戲主程序通常是GameName.exe或類(lèi)似名稱(chēng)是32位還是64位應(yīng)用程序。判斷方法任務(wù)管理器運(yùn)行游戲打開(kāi)任務(wù)管理器在“詳細(xì)信息”或“進(jìn)程”選項(xiàng)卡中找到游戲進(jìn)程查看“平臺(tái)”列。如果顯示“32位”你就需要x86版本的BepInEx如果顯示“64位”則需要x64版本。文件屬性右鍵點(diǎn)擊游戲主exe文件 - 屬性 - 兼容性選項(xiàng)卡。如果看到“以便攜模式運(yùn)行此程序”或類(lèi)似的舊版選項(xiàng)通常是32位。更準(zhǔn)確的方法是使用第三方工具如Dependencies原名Dependency Walker打開(kāi)exe查看。社區(qū)經(jīng)驗(yàn)再次強(qiáng)調(diào)模組頁(yè)面或安裝說(shuō)明里幾乎一定會(huì)寫(xiě)明。BepInEx的發(fā)布包通常會(huì)區(qū)分BepInEx_x86和BepInEx_x64或者在一個(gè)壓縮包里包含兩個(gè)文件夾。用錯(cuò)版本會(huì)導(dǎo)致注入失敗游戲可能正常啟動(dòng)但BepInEx完全不起作用。2.3 明確你的目的使用模組 vs. 開(kāi)發(fā)插件你的角色決定了你的配置復(fù)雜度和關(guān)注點(diǎn)。模組使用者你的主要目標(biāo)是讓BepInEx運(yùn)行起來(lái)然后正確安裝.dll或.zip格式的模組文件。你的配置重點(diǎn)在于BepInEx.cfg日志級(jí)別、控制臺(tái)開(kāi)啟和doorstop_config.ini確保注入成功。你更關(guān)心穩(wěn)定性和易用性。插件開(kāi)發(fā)者除了使用者的一切你還需要配置開(kāi)發(fā)環(huán)境。這包括設(shè)置Visual Studio或Rider項(xiàng)目引用正確的BepInEx庫(kù)BepInEx.Core.dll,0Harmony.dll等配置生成后事件將編譯的dll自動(dòng)拷貝到游戲的BepInEx/plugins目錄。你的配置重點(diǎn)還包括BepInEx/patchers目錄的使用如果你需要更底層的補(bǔ)丁以及理解如何調(diào)試注入后的游戲進(jìn)程。本指南會(huì)同時(shí)涵蓋這兩條路徑的關(guān)鍵節(jié)點(diǎn)但會(huì)以“快速部署使用”為主線“開(kāi)發(fā)配置”作為延伸部分。3. 工具選型與文件準(zhǔn)備工欲善其事必先利其器。正確的文件是成功的一半。3.1 獲取官方發(fā)布文件永遠(yuǎn)優(yōu)先從BepInEx的官方GitHub倉(cāng)庫(kù)發(fā)布頁(yè)面下載https://github.com/BepInEx/BepInEx/releases。這里能確保你獲得的是經(jīng)過(guò)測(cè)試的、干凈的、無(wú)惡意代碼的版本。避免從不明來(lái)源的網(wǎng)盤(pán)或第三方站點(diǎn)下載以防文件被篡改或捆綁垃圾軟件。在發(fā)布頁(yè)面你會(huì)看到幾種類(lèi)型的文件BepInEx_x64_VERSION.zip64位通用版本。BepInEx_x86_VERSION.zip32位通用版本。BepInEx_Unity_VERSION.zip針對(duì)特定Unity版本預(yù)編譯的版本如Unity 5, 2017, 2018等兼容性通常更好如果有對(duì)應(yīng)你游戲Unity版本的包優(yōu)先選用。Source code源代碼開(kāi)發(fā)者需要普通用戶無(wú)需下載。下載與你游戲位數(shù)和Unity版本匹配的ZIP包即可。3.2 核心目錄結(jié)構(gòu)解析解壓下載的ZIP包你會(huì)看到類(lèi)似如下的結(jié)構(gòu)以x64版本為例BepInEx/ ├── core/ # BepInEx核心運(yùn)行時(shí)庫(kù)如 BepInEx.Core.dll, 0Harmony.dll ├── patchers/ # 【開(kāi)發(fā)者】放置繼承自BaseUnityPatcher的補(bǔ)丁器DLL ├── plugins/ # 【核心】放置所有插件DLL的文件夾模組大多放這里 ├── config/ # 插件的配置文件目錄每個(gè)插件會(huì)生成自己的.cfg文件 ├── cache/ # BepInEx內(nèi)部緩存勿動(dòng) ├── LogOutput.log # 運(yùn)行日志如果配置了文件輸出 ├── BepInEx.cfg # 【核心】BepInEx自身的配置文件 ├── doorstop_config.ini # 【核心】注入器配置文件至關(guān)重要 ├── winhttp.dll # 【核心】注入觸發(fā)器x64版 └── version.dll # 【核心】注入觸發(fā)器x86版或x64的備選方案對(duì)于初次部署你需要重點(diǎn)關(guān)注的是整個(gè)BepInEx文件夾、winhttp.dll/version.dll以及那兩個(gè)配置文件。3.3 輔助工具推薦MelonLoader對(duì)于某些游戲尤其是較新的Unity版本游戲MelonLoader可能是比BepInEx更流行或兼容性更好的選擇。但在你決定之前務(wù)必查看游戲模組社區(qū)的主流選擇。兩者原理相似但互不兼容。Unity Explorer或BepInEx Configuration Manager這些是作為BepInEx插件存在的運(yùn)行時(shí)工具可以在游戲內(nèi)提供一個(gè)圖形界面讓你實(shí)時(shí)查看游戲?qū)ο蟆⑿薷慕M件屬性、管理插件配置等對(duì)于開(kāi)發(fā)和調(diào)試模組極其有用。但它們需要在BepInEx成功運(yùn)行后才能安裝。dnSpy或ILSpy.NET反編譯工具。當(dāng)你想深入研究游戲原有代碼邏輯尋找掛鉤點(diǎn)Hook Point時(shí)這些工具不可或缺。它們能讓你查看游戲程序集Assembly-CSharp.dll等的源代碼雖然可能被混淆。4. 標(biāo)準(zhǔn)部署流程步步詳解現(xiàn)在我們進(jìn)入實(shí)戰(zhàn)環(huán)節(jié)。假設(shè)你的游戲安裝在D:\Steam\steamapps\common\MyUnityGame。4.1 第一步定位游戲根目錄并備份這是鐵律。在放入任何文件前備份你的游戲根目錄或者至少備份游戲原生的主exe文件和UnityPlayer.dll等核心文件。簡(jiǎn)單的復(fù)制粘貼整個(gè)游戲文件夾即可。這能在配置出錯(cuò)導(dǎo)致游戲無(wú)法啟動(dòng)時(shí)讓你瞬間回滾到原始狀態(tài)。找到你的游戲根目錄它應(yīng)該包含MyUnityGame.exe或類(lèi)似名稱(chēng)、UnityPlayer.dll、MyUnityGame_Data文件夾等。4.2 第二步放置BepInEx文件將下載并解壓得到的整個(gè)BepInEx文件夾復(fù)制到游戲根目錄。現(xiàn)在路徑應(yīng)該是D:\Steam\steamapps\common\MyUnityGame\BepInEx。將解壓得到的winhttp.dll對(duì)于64位游戲或version.dll對(duì)于32位游戲也復(fù)制到游戲根目錄與主exe文件同級(jí)。這里有一個(gè)關(guān)鍵細(xì)節(jié)winhttp.dll是默認(rèn)的注入觸發(fā)器。它的原理是利用Windows系統(tǒng)的DLL搜索順序劫持。當(dāng)游戲啟動(dòng)時(shí)系統(tǒng)會(huì)嘗試加載winhttp.dll而我們提供的這個(gè)DLL實(shí)際上是一個(gè)“冒名頂替者”它會(huì)在被加載時(shí)執(zhí)行代碼將真正的BepInEx核心注入到游戲進(jìn)程。如果游戲本身或其反作弊系統(tǒng)如EasyAntiCheat, BattlEye加載了真正的winhttp.dll可能會(huì)導(dǎo)致沖突或注入失敗。此時(shí)可以嘗試改用version.dll作為觸發(fā)器將文件重命名或使用對(duì)應(yīng)的版本。4.3 第三步關(guān)鍵配置文件調(diào)優(yōu)默認(rèn)配置通??梢怨ぷ鞯珵榱烁玫捏w驗(yàn)和排查問(wèn)題我們調(diào)整兩個(gè)核心文件。1. 配置doorstop_config.ini這個(gè)文件控制注入過(guò)程。用記事本或其他文本編輯器打開(kāi)它。[General] enabledtrue ; 是否啟用Doorstop注入器false則完全禁用BepInEx targetAssemblyBepInEx\core\BepInEx.Preloader.dll ; BepInEx預(yù)加載器的路徑一般不用改 doorstopTypedefault ; 注入類(lèi)型默認(rèn)即可 [Unity] ; 對(duì)于Unity游戲這個(gè)區(qū)域很重要 redirectOutputLogtrue ; 是否將Unity的Debug.Log輸出重定向到BepInEx控制臺(tái)建議true方便調(diào)試對(duì)于大多數(shù)情況保持默認(rèn)即可。如果你遇到注入問(wèn)題可以嘗試將doorstopType改為mono或il2cpp取決于游戲使用的腳本后端這通常也需要社區(qū)經(jīng)驗(yàn)來(lái)確認(rèn)。2. 配置BepInEx.cfg這個(gè)文件控制BepInEx自身的行為。打開(kāi)BepInEx\config目錄下的BepInEx.cfg。[Logging] # 控制臺(tái)設(shè)置 ConsoleEnabled true # 是否啟用彈出式控制臺(tái)窗口強(qiáng)烈建議設(shè)為true這是你看日志和調(diào)試信息的主要窗口 ConsoleOutRedirect true # 是否將控制臺(tái)輸出同時(shí)重定向到標(biāo)準(zhǔn)輸出stdout ShowLogInConsole true # 是否在控制臺(tái)中顯示日志消息 [Logging.Disk] # 磁盤(pán)日志設(shè)置 Enabled true # 是否將日志寫(xiě)入文件 LogLevels All # 寫(xiě)入文件的日志級(jí)別All表示全部寫(xiě)入 DisplayedLogLevels Fatal, Error, Warning, Message, Info # 在控制臺(tái)中顯示的日志級(jí)別可以過(guò)濾掉過(guò)于詳細(xì)的Debug信息確保ConsoleEnabled true這樣游戲啟動(dòng)時(shí)會(huì)彈出一個(gè)黑色的控制臺(tái)窗口所有BepInEx和插件的日志都會(huì)在這里打印是排查問(wèn)題的生命線。4.4 第四步首次運(yùn)行與驗(yàn)證像往常一樣通過(guò)Steam或直接雙擊游戲主exe啟動(dòng)游戲。如果配置正確你應(yīng)該會(huì)先看到一個(gè)黑色的控制臺(tái)窗口彈出滾動(dòng)著一些初始化信息然后游戲窗口才出現(xiàn)。進(jìn)入游戲主菜單或場(chǎng)景后觀察控制臺(tái)。如果看到類(lèi)似[Info : BepInEx] Loading [YourModName] 1.0.0這樣的信息恭喜你BepInEx部署成功檢查游戲根目錄應(yīng)該新生成了BepInEx\config下的一些插件配置文件以及BepInEx\plugins目錄如果是空的沒(méi)關(guān)系因?yàn)槟氵€沒(méi)裝插件。如果游戲啟動(dòng)但沒(méi)有控制臺(tái)彈出或者啟動(dòng)即崩潰請(qǐng)?zhí)D(zhuǎn)到第6章“常見(jiàn)問(wèn)題排查”。5. 插件/模組的管理與進(jìn)階配置BepInEx成功運(yùn)行后你的模組世界才剛剛開(kāi)始。5.1 安裝與管理插件絕大多數(shù)為BepInEx開(kāi)發(fā)的插件都是一個(gè)單獨(dú)的.dll文件。安裝極其簡(jiǎn)單將下載的插件.dll文件放入BepInEx\plugins文件夾??梢栽诖宋募A內(nèi)創(chuàng)建子文件夾來(lái)分類(lèi)管理插件BepInEx會(huì)自動(dòng)遞歸搜索。啟動(dòng)游戲在控制臺(tái)日志中確認(rèn)插件被加載。有些模組作者會(huì)提供包含plugins、config等文件夾的壓縮包直接合并到游戲根目錄的BepInEx文件夾下即可。5.2 理解插件依賴(lài)鏈復(fù)雜的模組可能有依賴(lài)關(guān)系。例如插件A需要插件B提供的某些API才能運(yùn)行。這些依賴(lài)通常以“BepInEx依賴(lài)項(xiàng)”的形式聲明在插件的元數(shù)據(jù)中。如果缺少依賴(lài)控制臺(tái)會(huì)明確報(bào)錯(cuò)例如Failed to load [PluginA] because dependency [PluginB] was not found。解決方案就是安裝所有必需的依賴(lài)插件。通常模組頁(yè)面會(huì)明確列出依賴(lài)項(xiàng)并提供下載鏈接。常見(jiàn)的底層依賴(lài)包括BepInEx.Harmony如果插件使用了Harmony庫(kù)進(jìn)行代碼修補(bǔ)這是非常常見(jiàn)的模組技術(shù)可能需要這個(gè)。MMHOOK (MonoMod.RuntimeDetour)一些插件用于掛鉤Unity事件。 這些依賴(lài)插件同樣放在BepInEx\plugins目錄下。5.3 配置插件行為每個(gè)插件在第一次被加載后通常會(huì)在BepInEx\config目錄下生成一個(gè)以插件GUID命名的.cfg文件例如com.author.modname.cfg。這個(gè)文件包含了該插件所有可配置的選項(xiàng)如開(kāi)關(guān)、快捷鍵、數(shù)值參數(shù)等。你可以直接編輯這個(gè)文件來(lái)修改配置但更推薦的方法是使用BepInEx Configuration Manager插件。安裝這個(gè)插件后在游戲內(nèi)按F1鍵通常是這個(gè)快捷鍵可以調(diào)出一個(gè)圖形化的配置菜單在這里你可以實(shí)時(shí)修改所有已安裝插件的設(shè)置無(wú)需重啟游戲即可生效取決于插件實(shí)現(xiàn)。5.4 為開(kāi)發(fā)者搭建簡(jiǎn)易開(kāi)發(fā)環(huán)境如果你想從使用者變?yōu)閯?chuàng)造者需要以下步驟創(chuàng)建類(lèi)庫(kù)項(xiàng)目在Visual Studio中新建一個(gè)“.NET Framework”或“.NET Standard”類(lèi)庫(kù)項(xiàng)目。項(xiàng)目目標(biāo)框架版本最好與游戲使用的.NET版本匹配對(duì)于較新的Unity游戲可能是.NET Framework 4.7.1或.NET Standard 2.0/2.1。引用BepInEx庫(kù)從你游戲目錄的BepInEx\core文件夾中添加對(duì)BepInEx.Core.dll和0Harmony.dll如果你要用Harmony的引用。不要從NuGet獲取必須使用游戲附帶的版本以確保API完全匹配。編寫(xiě)插件主類(lèi)創(chuàng)建一個(gè)繼承自BaseUnityPlugin的類(lèi)。使用[BepInPlugin]屬性聲明插件的GUID、名稱(chēng)和版本。在Awake()或Start()方法中編寫(xiě)你的初始化代碼。using BepInEx; using BepInEx.Logging; using HarmonyLib; [BepInPlugin(PluginGUID, PluginName, PluginVersion)] public class MyAwesomePlugin : BaseUnityPlugin { public const string PluginGUID “com.yourname.awesomeplugin”; public const string PluginName “My Awesome Plugin”; public const string PluginVersion “1.0.0”; internal static ManualLogSource Log; private void Awake() { Log Logger; Log.LogInfo($“{PluginName} {PluginVersion} is loading!”); // 應(yīng)用Harmony補(bǔ)丁 Harmony.CreateAndPatchAll(typeof(MyPatches)); } }配置生成后事件為了讓編譯的dll自動(dòng)復(fù)制到游戲插件目錄在項(xiàng)目屬性 - 生成事件 - 后期生成事件命令行中添加copy /Y “$(TargetPath)” “D:\Steam\steamapps\common\MyUnityGame\BepInEx\plugins\$(TargetFileName)”將路徑替換為你自己的游戲路徑。編譯與測(cè)試編譯項(xiàng)目dll會(huì)自動(dòng)復(fù)制到插件目錄。啟動(dòng)游戲在控制臺(tái)查看你的插件日志。6. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄即使按照指南操作也可能會(huì)遇到問(wèn)題。以下是典型問(wèn)題及解決思路。6.1 游戲啟動(dòng)無(wú)反應(yīng)或閃退無(wú)控制臺(tái)這是最令人頭疼的情況說(shuō)明注入階段就失敗了。檢查位元確認(rèn)你使用的BepInEx版本x86/x64與游戲完全匹配。這是最常見(jiàn)的原因。檢查防作弊如果游戲帶有BattlEye、EasyAntiCheatEAC等反作弊系統(tǒng)BepInEx很可能無(wú)法運(yùn)行甚至?xí)?dǎo)致封號(hào)。在多人或官方服務(wù)器游戲中使用模組前務(wù)必查閱游戲規(guī)則和模組作者警告。部分游戲有專(zhuān)門(mén)的“模組服務(wù)器”或“創(chuàng)意模式”允許使用。更換注入觸發(fā)器嘗試將winhttp.dll重命名為winhttp.dll.bak然后將version.dll如果存在復(fù)制一份并重命名為winhttp.dll或者直接使用version.dll作為主觸發(fā)器確保doorstop_config.ini中的相關(guān)設(shè)置正確但通常不需要改。檢查殺毒軟件/防火墻有時(shí)它們會(huì)誤殺或阻止winhttp.dll等文件。將游戲目錄添加到白名單。查看Windows事件查看器在Windows搜索“事件查看器”打開(kāi)“Windows日志”-“應(yīng)用程序”查看游戲崩潰時(shí)刻的錯(cuò)誤記錄可能包含有價(jià)值的線索。6.2 控制臺(tái)彈出但游戲卡死或黑屏注入成功但BepInEx或某個(gè)插件在初始化時(shí)崩潰。查看控制臺(tái)最后幾行錯(cuò)誤信息這是最直接的線索。錯(cuò)誤信息通常會(huì)指向某個(gè)具體的插件或BepInEx組件。移除所有插件清空BepInEx\plugins文件夾只保留BepInEx核心。如果游戲能正常啟動(dòng)說(shuō)明問(wèn)題出在某個(gè)插件上。然后采用“二分法”每次放回一半插件逐步定位問(wèn)題插件。檢查插件依賴(lài)確認(rèn)問(wèn)題插件所需的所有依賴(lài)都已正確安裝。檢查插件兼容性確認(rèn)插件版本與你的游戲版本、BepInEx版本兼容。老插件可能不兼容新版游戲或BepInEx。6.3 插件已加載但功能不生效游戲和控制臺(tái)都正常但模組功能沒(méi)出現(xiàn)。檢查插件配置文件有些插件默認(rèn)是禁用狀態(tài)或者某些功能需要手動(dòng)在配置文件中開(kāi)啟。去BepInEx\config下找到對(duì)應(yīng)插件的cfg文件檢查。查看插件日志在控制臺(tái)里找到該插件加載時(shí)的日志行看是否有“初始化成功”或“注冊(cè)了XX功能”的消息。也可能有警告信息提示功能未啟用??旖萱I沖突很多插件的功能通過(guò)快捷鍵觸發(fā)如按F5打開(kāi)菜單。確認(rèn)你沒(méi)有其他軟件如錄屏工具、輸入法占用了相同的快捷鍵。游戲模式限制某些模組功能可能只在特定游戲模式如單人、創(chuàng)意模式下生效。6.4 控制臺(tái)日志刷屏或過(guò)于冗長(zhǎng)這會(huì)影響性能也讓你難以找到關(guān)鍵錯(cuò)誤。修改BepInEx.cfg調(diào)整DisplayedLogLevels選項(xiàng)。例如設(shè)置為Fatal, Error, Warning, Message可以過(guò)濾掉Info和Debug級(jí)別的瑣碎信息。禁用特定插件的日志有些插件有自己的日志開(kāi)關(guān)在其配置文件中尋找。6.5 更新游戲或BepInEx后模組失效游戲更新或BepInEx框架更新后原有的插件可能因API變化而失效。等待模組作者更新這是最穩(wěn)妥的方式。關(guān)注模組發(fā)布頁(yè)面的更新?;貪L游戲版本如果Steam游戲支持可以回滾到之前的版本。謹(jǐn)慎更新BepInEx除非新版本修復(fù)了你必須的問(wèn)題或者你使用的插件要求新版否則對(duì)于穩(wěn)定運(yùn)行的環(huán)境不必追求最新版的BepInEx。7. 性能調(diào)優(yōu)與最佳實(shí)踐一個(gè)穩(wěn)定、高效的模組環(huán)境需要一些維護(hù)。7.1 管理插件數(shù)量“插件越多越好”是個(gè)誤區(qū)。每個(gè)插件都會(huì)占用內(nèi)存和CPU周期尤其是在游戲的每一幀Update循環(huán)中執(zhí)行操作的插件。只安裝你真正需要和經(jīng)常使用的插件。定期清理BepInEx\plugins文件夾。7.2 關(guān)注插件質(zhì)量從Nexus Mods等知名社區(qū)下載模組時(shí)關(guān)注文件的“下載量”、“點(diǎn)贊數(shù)”和“最近更新日期”。活躍維護(hù)、用戶基數(shù)大的模組通常更穩(wěn)定。仔細(xì)閱讀模組頁(yè)面的“需求”、“沖突”和“安裝說(shuō)明”部分。7.3 善用配置文件備份當(dāng)你配置好一套滿意的插件和參數(shù)后備份整個(gè)BepInEx文件夾或者至少是config和plugins文件夾。這在你重裝游戲、更換電腦或嘗試新模組把環(huán)境搞亂后能快速恢復(fù)到你熟悉的狀態(tài)。7.4 理解Harmony補(bǔ)丁的代價(jià)許多強(qiáng)大模組的核心技術(shù)是Harmony它允許你在運(yùn)行時(shí)修改游戲原有代碼。雖然強(qiáng)大但不當(dāng)?shù)难a(bǔ)丁例如在性能敏感的循環(huán)方法上打補(bǔ)丁會(huì)顯著降低游戲性能。作為使用者如果感覺(jué)裝了某個(gè)模組后游戲變卡可以嘗試禁用該模組來(lái)確認(rèn)。7.5 保持環(huán)境清潔避免手動(dòng)修改游戲原生的程序集文件如Assembly-CSharp.dll。BepInEx的設(shè)計(jì)理念就是非侵入式的所有修改都應(yīng)通過(guò)插件和Harmony補(bǔ)丁來(lái)完成。直接修改原生dll會(huì)導(dǎo)致兼容性極差且無(wú)法與其他模組共存。