BepInEx 模组框架快速入门:两条安装路径与 30 分钟跑通第一个 Unity 游戏插件 📅 2026/8/17 18:11:17 BepInEx 模组框架快速入门两条安装路径与 30 分钟跑通第一个 Unity 游戏插件【免费下载链接】BepInExUnity / XNA game patcher and plugin framework项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx如果你玩过几款热门的 Unity 游戏大概率经历过这样的场景满心欢喜下载了一个完美汉化补丁解压后却是一堆看不懂的.dll文件塞进游戏目录后一启动——直接黑屏闪退。不是你操作失误而是这些补丁大多依赖一个共同的宿主BepInEx。它是 Unity Mono、IL2CPP 以及 .NET/XNA 游戏的插件与模组框架Bepis Injector Extensible玩家只要把它正确装进游戏根目录各种汉化、功能增强、玩法扩展插件就能被自动加载。这篇文章会用新手能跟上的节奏带你完成 BepInEx 框架的安装选型、首次启动验证以及动手写一个属于自己的最小插件。一、先搞清楚BepInEx 到底替你做了什么很多人的第一个困惑是我不就是装个模组吗为什么还要先装一个框架你可以把游戏想象成一栋装修好的房子。传统模组是直接砸墙打孔改哪儿坏哪儿换个游戏版本可能整面墙都塌了。BepInEx 的做法是给这栋房子加一个物业管理处——游戏启动时先跑一段框架代码由它统一负责哪些插件被加载、按什么顺序加载、插件之间谁依赖谁、配置写到哪里、日志记在哪里。插件开发者只需要面向 BepInEx 的接口写代码不需要关心游戏内部怎么变。分层来看它由这几块协作对应仓库目录BepInEx.Core/核心库包括插件契约、配置系统Configuration、日志系统Logging和链式加载器Bootstrap/BaseChainloader.csBepInEx.Preloader.Core/预加载与程序集补丁Patching/负责在游戏主程序逻辑跑起来前注入Runtimes/Unity/与Runtimes/NET/分别对接 Unity 的 Mono、IL2CPP 运行时和 .NET/XNA 系游戏。一句话概括BepInEx 是插件的插件你装它的目的是为了以后装任何模组都不再裸奔。二、安装前先做一道判断题你的游戏属于哪一类BepInEx 不是一个版本走天下选错版本是新手翻车率最高的原因。开工前先花 30 秒确认游戏类型判断依据很简单看游戏目录里有没有GameAssembly.dll基本是 IL2CPPManaged/文件夹里的.dll能否直接被 ILSpy 之类的工具打开Mono 通常可以。下面的兼容性表来自仓库 README建议直接对照它选版本游戏类型WindowsmacOSLinuxARMUnity Mono✔✔✔不适用Unity IL2CPP✔✖✔✖.NET / XNAFNA、MonoGame✔仅 Mono仅 Mono不适用注意截至仓库当前状态只有 Unity Mono 有稳定发布版本IL2CPP 属于 BepInEx 6 的测试通道Bleeding Edge。给 IL2CPP 游戏装 5.x 稳定版会直接失败务必以项目最新 release 说明为准。选型路径大致是游戏类型识别 → 选版本分支 → 下载对应包 → 解压到游戏根目录 ↓ ↓ ↓ ↓ 看GameAssembly Mono选5.x 核对架构 首启验证日志 IL2CPP选6.x三、两条快速安装路径对应两种启动方式确定版本后安装本身只有两步把压缩包里的BepInEx/文件夹和启动相关文件解压到游戏根目录和游戏主程序.exe同级千万别嵌套一层然后首次运行游戏让框架自动生成目录结构。不同平台启动方式略有差别这也是本文想让你一次记住的两条路径路径 AWindows 玩家最常见解压后确认根目录出现winhttp.dll和doorstop_config.iniMono 游戏或doorstop_config_il2cpp.iniIL2CPP 游戏。直接双击游戏启动即可Doorstop 负责在游戏进程内注入框架。路径 BLinux / macOS 玩家仓库在Runtimes/Unity/Doorstop/下提供了现成脚本run_bepinex_mono.sh和run_bepinex_il2cpp.sh。把脚本放到游戏根目录先编辑里面的executable_name填上游戏可执行文件名然后./run_bepinex_mono.sh脚本会自动设置LD_PRELOAD加载libdoorstop并导出DOORSTOP_TARGET_ASSEMBLY指向核心程序集。顺带一提脚本里对 Steam 启动参数、Apple Silicon 原生架构都有处理这部分属于进阶内容先知道有这回事即可。首次启动成功后游戏目录里会出现BepInEx/ ├── core/ ← 框架核心程序集来自 BepInEx.Core 等 ├── plugins/ ← 普通插件放这里 ├── patchers/ ← 更底层的预加载补丁 ├── config/ ← 每个插件一个 {GUID}.cfg └── LogOutput.log ← 排查问题最关键的日志四、核心实战30 分钟写出你的第一个插件框架装好后光会装别人做的模组不算完自己动手写一个最小插件能让你彻底理解插件加载机制。下面用仓库里的 Unity Mono 实现Runtimes/Unity/BepInEx.Unity.Mono/BaseUnityPlugin.cs为例。第 1 步建一个类库工程引用框架先拉取源码同时也方便看示例git clone https://gitcode.com/GitHub_Trending/be/BepInEx然后新建一个 .NET 类库引用 BepInEx 编译产物或对应 NuGet 包。第 2 步写插件主体创建一个继承BaseUnityPlugin的类并用BepInPlugin特性声明元数据。BepInPlugin的三个参数分别是 GUID、显示名和版本号见BepInEx.Core/Contract/Attributes.csusing BepInEx.Unity.Mono; using BepInEx.Logging; namespace MyFirstMod; [BepInPlugin(com.example.hello, Hello World Mod, 1.0.0)] public class HelloPlugin : BaseUnityPlugin { private void Awake() { Logger.LogInfo(Hello from BepInEx! 插件加载成功); } }注意两件事GUID 只允许字母、数字、点、下划线和连字符——BaseChainloader会用正则校验格式非法会直接跳过该插件且只给一条日志提示Awake()是 Unity 生命周期方法插件加载时自动调用。第 3 步加一个可配置项体验配置系统BaseUnityPlugin自带一个Config属性首次写入设置时会在BepInEx/config/下按 GUID 生成.cfg文件实现见BepInEx.Core/Configuration/ConfigEntryBase.csprivate ConfigEntryint _times; private void Awake() { _times Config.Bind(General, GreetTimes, 1, 问候重复次数); for (int i 0; i _times.Value; i) Logger.LogInfo(Hello from BepInEx!); }编译出的MyFirstMod.dll丢进BepInEx/plugins/启动游戏观察LogOutput.log[Info] Hello from BepInEx! 插件加载成功看到这行日志说明从框架安装到插件开发的整条链路你已经全部打通了。五、翻车自救清单这些坑 90% 的新手都踩过与其事后百度不如先看清单。以下每一条都对应一个真实可复现的问题❌把BepInEx文件夹解压到了游戏目录/子目录/里—— 框架必须在游戏根目录才能被 Doorstop 找到❌版本错配—— 拿 5.x 装 IL2CPP 游戏或反过来。选型请回到第二节的表格❌杀毒软件静默删除了winhttp.dll/libdoorstop.so—— 安装前给游戏目录加白名单装完再启动❌插件 GUID 带中文或特殊字符—— 会被BaseChainloader以illegal format为由跳过日志里只有一行 Warning不看日志很难发现❌改配置文件改崩了—— 插件配置在config/下按 GUID 命名改坏就把对应.cfg删掉重启会重新生成默认值❌在 Linux 下直接双击游戏二进制—— 没走run_bepinex_mono.sh注入根本没发生。判断以上任何问题第一动作永远是打开BepInEx/LogOutput.log看前 30 行框架是否加载、游戏是否被识别、插件是否被跳过全部有记录。日志级别从Fatal到Trace分为多档见BepInEx.Core/Logging/LogLevel.cs日常排查盯Error和Warning就够。六、高频问题速查FAQ问题一句话答案装完启动没反应也没生成BepInEx/多半是解压位置错了或杀毒拦了注入文件先检查winhttp.dll是否还在插件明明放进plugins/却没加载看日志是否提示 GUID 非法 / 版本不兼容 / 缺少依赖插件想控制插件加载顺序怎么办给插件文件名加数字前缀如00-、10-按字母序加载IL2CPP 游戏装不上 6.x 怎么办IL2CPP 目前是非稳定通道先去查目标游戏的社区适配版本不要硬上我不想用框架了怎么还原删除BepInEx/文件夹、winhttp.dll、doorstop 配置与启动脚本即可存档不受影响自己编译框架需要什么环境需要 .NET 6Windows 上build.cmd --target CompileLinux/macOS 用./build.sh --target Compile见docs/BUILDING.md七、装完第一个插件之后还能往哪走到这里你已经有能力装框架、装模组、写插件、看日志了。接下来按兴趣选一条路深入想改游戏行为去了解 HarmonyXBepInEx 官方配套库的Patch机制它能拦截并改写游戏原有方法——社区里绝大多数游戏增强都建立在它之上想维护自己的模组环境给每个插件建一个记录名称/版本/依赖/来源养成改动前备份存档的习惯更新插件前先看其依赖的框架版本想参与框架本身BepInEx 使用 LGPL-2.1 许可源码组织清晰Runtimes/下 Unity 与 .NET 两条线可以对照学习先看BaseChainloader的插件校验逻辑再看Preloader.Core的补丁流程理解会非常顺畅遇到具体问题去哪问官方文档、Discord 社区和各类游戏专属模组群提问时附上LogOutput.log和你的游戏/框架版本别人才能帮到你。BepInEx 的价值不在于多了一个工具而在于它把混乱的模组世界收敛成了一套有秩序的标准插件有规范、配置有位置、日志有记录、冲突有排查路径。现在打开你的游戏目录完成上面第一节的判断题然后动手装一次——30 分钟后你就能在日志里看到属于自己的那一行加载成功。【免费下载链接】BepInExUnity / XNA game patcher and plugin framework项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考