BepInEx:免费的 Unity Mod 插件框架,安装构建与排障指南
BepInEx免费的 Unity Mod 插件框架安装构建与排障指南【免费下载链接】BepInExUnity / XNA game patcher and plugin framework项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx想让 Unity 游戏跑 Mod不用再自己写注入和钩子。BepInEx 是免费的 Unity Mod 插件框架插件 DLL 放进 plugins 目录启动即自动发现、按依赖排序并加载同时覆盖 IL2CPP 与 .NET 系游戏XNA、FNA、MonoGame。玩家拿来即用开发者也能基于它写插件。快速上手从零到可用的 4 步插件安装步骤只想装来用下载对应运行时的发布包Unity Mono 选稳定版IL2CPP 选 Bleeding Edge 版。把解压出的BepInEx文件夹整个拷到游戏根目录即 exe 所在处。把要用的插件 DLL 放进BepInEx/plugins。正常启动游戏打开游戏根目录的LogOutput.log确认能看到各插件的加载记录、没有 ERROR 行。第 4 步看不到任何 BepInEx 输出时通常是注入层没生效直接看下文排障清单第 1 条。源码构建指南想自己构建前提安装.NET 6.0或更高版本这是构建脚本的硬性要求。git clone https://gitcode.com/GitHub_Trending/be/BepInEx cd BepInEx然后按系统执行编译命令./build.sh --target Compile # Linuxbuild.cmd --target Compile # Windows要打包出分发包把目标换成--target MakeDist会再走一遍 Compile细节见 docs/BUILDING.md。各运行时平台支持情况运行时WindowsmacOSLinuxUnity Mono✔️✔️✔️Unity IL2CPP✔️❌✔️.NET / XNA✔️需装 Mono需装 Mono原理 3 分钟看懂它是怎么跑起来的把整个加载过程想成货运站的安检闸机游戏本体是一辆要出发的卡车插件是货箱。卡车到闸机口Doorstop 注入层先被截下扫描仪逐箱读运单——GUID、版本号、依赖项、目的地进程同 GUID 的旧货箱直接拦下目的地不符的也拦下调度员按依赖顺序重新码好货箱才放卡车走。落到代码上闸机开关在doorstop_config_mono.inienabled truetarget_assembly指向BepInEx/core/BepInEx.Unity.Mono.Preloader.dll游戏一启动就先执行这个预加载程序。扫描由BaseChainloader完成遍历 plugins 目录用 Cecil 逐 DLL 读出[BepInPlugin]等特性元数据缓存到 cache 目录二次启动跳过重复解析。排序在同处完成按 GUID 去重、按[BepInDependency]排出先后全部加载结束才把控制权交还给游戏主流程。目录结构路径全部写死在代码里不是约定俗成游戏根目录/ ├── BepInEx/ │ ├── core/ # 框架核心 DLL 与预加载入口 │ ├── plugins/ # 插件 DLL 放这里 │ ├── patchers/ # 预加载修补程序先于主循环执行 │ ├── config/ # 各插件的 .cfg 配置含全局 BepInEx.cfg │ └── cache/ # 插件元数据缓存加速二次启动 └── LogOutput.log # 磁盘日志崩溃排查先看它路径定义见 BepInEx.Core/Paths.cs扫描与排序逻辑见 BepInEx.Core/Bootstrap/BaseChainloader.cs。进阶可选项值得动手调的地方redirect_output_log改 Runtimes/Unity/Doorstop/doorstop_config_mono.ini 为 true。效果Unity 原生日志重定向到当前目录的 output_log.txt。适合排查 BepInEx 接管之前发生的错误。InstantFlushing在BepInEx/config/BepInEx.cfg的 Logging.Disk 段设为 true定义见 BaseChainloader.cs。效果每条日志立即写盘高频日志时有性能损耗。适合崩溃现场取证。ConcurrentFileLimit同在 Logging.Disk 段默认 5。效果限制并发写入的日志文件数一个游戏实例占一个文件。适合同时调试多个实例。dll_search_path_overridedoorstop ini 的 [UnityMono] 段默认BepInEx\core。效果Mono 查找核心库时的首选目录。适合原游戏 Managed 目录被裁剪的发行版。[BepInDependency] / [BepInProcess]定义在 BepInEx.Core/Contract/Attributes.cs。效果前者声明必须先加载的插件区分硬依赖与软依赖后者限定只在指定进程加载。适合写插件时控制加载条件。排障清单常见问题与修复现象游戏能进主界面但 plugins 里的插件全都没反应。 原因注入层 Doorstop 没生效或 target_assembly 指错了程序集。 修复打开 doorstop 配置确认enabled true且 target_assembly 指向BepInEx\core\BepInEx.Unity.Mono.Preloader.dll。现象启动时报缺少 mscorlib 等核心程序集。 原因原游戏的 Managed 目录被裁剪过Mono 找不到基础库。 修复保留 ini 里的dll_search_path_override BepInEx\core让 Mono 优先从框架目录取库。现象同一插件放了两份不同版本的 DLL只有一份被加载。 原因GUID 相同即视为同一插件框架按版本号只保留最高的一份。 修复删掉旧版本 DLLplugins 里只留一份。现象插件在 A 游戏正常换到 B 游戏就不加载。 原因类上标了[BepInProcess]只允许在指定进程名下运行。 修复核对属性里的进程名和当前游戏 exe 文件名是否一致。现象⚠️ IL2CPP 游戏装稳定版 BepInEx 无法运行。 原因官方稳定发布目前只覆盖 Unity MonoIL2CPP 没有稳定版。 修复按发布说明改用 Bleeding Edge 构建或等待官方后续支持。BepInEx 是当前 Unity Mod 生态的事实基础设施绝大多数第三方插件都构建在它之上。想深入从 docs/BUILDING.md 的构建目标看起再通读 BepInEx.Core/ 里的配置与日志 API。【免费下载链接】BepInExUnity / XNA game patcher and plugin framework项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考