简单了解mod文件夹【BepInEx】【全程Bepis Injector Extensible】

BepInEx 完整指南:从原理到文件结构

什么是BepInEx?

BepInEx(Bepis Injector Extensible)是一个开源的Unity游戏插件框架,专门为Unity引擎开发的游戏设计,支持Unity Mono、IL2CPP以及.NET框架游戏。它通过非侵入式的方式在游戏启动时注入,允许开发者在不修改游戏原始代码的情况下扩展游戏功能、添加新特性或修改游戏逻辑。

核心工作原理

BepInEx的核心工作流程基于预加载器机制,在游戏启动初期介入,通过UnityDoorstop组件实现进程注入。这一设计确保了框架能够在游戏主逻辑加载前完成初始化,为后续插件运行奠定基础。
代码注入技术是BepInEx的基石,它使用MonoMod和Cecil库对游戏程序集进行动态分析和修改。这种非侵入式的修改方式既保证了游戏的稳定性,又为开发者提供了丰富的扩展可能。

文件夹结构详解

BepInEx安装后会在游戏根目录生成以下文件夹结构:

核心文件夹

文件夹
功能说明
BepInEx
框架根目录
├── cache
缓存文件夹,存储预处理结果
├── config
配置文件目录,存放BepInEx和各插件的配置
├── core
框架核心文件夹,包含BepInEx.dll等核心文件
├── patchers
特殊插件文件夹,存放需要高级功能的插件
├── plugins
常规插件文件夹,大部分插件都放在这里
└── LogOutput.log
运行日志文件

配置文件结构

在config目录下,你会看到:
  • BepInEx.cfg- BepInEx自身的核心设置
  • game_name.config- 特定游戏的兼容性配置
  • PluginName.config- 各插件的独立配置文件

核心文件功能

1. doorstop_config.ini

位于游戏根目录,是BepInEx的启动配置文件,负责将BepInEx注入游戏进程。主要配置项包括:
  • targetAssembly- 指定要注入的目标程序集
  • searchPathOverride- 自定义程序集搜索路径
  • ignoreDisableSwitch- 是否忽略禁用开关

2. winhttp.dll

Doorstop组件的核心文件,负责在Windows系统上实现进程注入。

3. BepInEx.dll

框架的核心程序集,包含插件加载器、配置系统、日志记录等核心功能。

4. BepInEx.Preloader.Core.dll

预加载器核心模块,负责在游戏启动时注入BepInEx运行时。

插件加载机制

BepInEx采用链式加载器设计,支持多种插件格式的并行运行。插件加载顺序可以通过文件命名前缀控制:
  • 000-MyPlugin.dll- 数字越小加载越早
  • 100-AnotherPlugin.dll- 中间加载
  • 999-LastPlugin.dll- 最后加载

配置系统

BepInEx的配置系统基于TOML格式,提供了类型安全的配置项管理。配置文件位于BepInEx/config目录,支持实时更新和变更通知。

日志系统

BepInEx提供了完整的日志记录体系,支持多级别输出(Debug、Info、Warning、Error、Fatal)和自定义日志目标。日志文件LogOutput.log是排查问题的重要依据。

开发语言

BepInEx主要使用C#编程语言进行开发,同时使用.NET Framework作为运行时环境。插件开发也需要使用C#语言,通过继承BaseUnityPlugin类并实现必要的方法来创建插件。

多平台支持

BepInEx全面支持Windows、macOS和Linux三大操作系统,能适配Unity Mono、IL2CPP等多种游戏编译方式。

实际应用场景

  1. 模组开发​ - 创建新的游戏内容,如新角色、物品、地图等
  2. 作弊工具​ - 用于游戏测试或娱乐,如无限生命、无限资源
  3. 性能优化​ - 调整游戏内部逻辑,提升运行效率
  4. 用户体验改进​ - 增加快捷键、改善界面、修复bug等

安装验证

安装成功后,启动游戏,检查以下内容:
  • BepInEx文件夹是否生成所有子目录
  • LogOutput.log文件是否有启动日志
  • 在控制台输入help命令,如果能返回插件列表,说明框架正常运行
通过理解BepInEx的原理和文件结构,你可以更好地管理和开发Unity游戏插件,打造个性化的游戏体验。
 
 
那简单了解了一下,是不是说明只转移pligins是没用的,因为配置config没进去,启动的时候就不会调用插件,那core是具体起什么作用,patcher是通过什么来跟插件进行联系的,还是说特殊插件也是配置在config,那为什么要分开,直接放插件文件夹不就行了
问得非常好!这些都是理解BepInEx工作原理的关键问题。你的理解大部分是正确的,我来详细解释:

你的理解是正确的

是的,只转移plugins是没用的,因为:
  1. config文件夹包含了每个插件的配置文件,没有这些配置,插件可能使用默认值或根本无法运行
  2. patchers文件夹中的特殊插件如果缺失,某些功能会直接崩溃
  3. core文件夹包含了BepInEx框架本身,没有它什么都启动不了

core文件夹的作用

coreBepInEx框架的心脏,包含:
  • BepInEx.dll​ - 主框架程序集
  • BepInEx.Harmony.dll​ - Harmony集成,用于方法补丁
  • 0Harmony.dll​ - Harmony库本身
  • Mono.Cecil.dll​ - 程序集分析和修改库
  • 其他核心依赖库
如果没有core文件夹,游戏启动时根本不会加载BepInEx框架,所有插件都无法被识别。

patchers的特殊性

为什么要分开存放?

patchers文件夹存放的是预处理器插件,它们在游戏生命周期的不同阶段加载:
游戏启动流程:
1. 游戏进程启动
2. Doorstop注入BepInEx
3. BepInEx Preloader启动
4. 加载patchers中的插件(最先执行!)
5. 加载Unity引擎
6. 加载游戏程序集
7. 加载plugins中的普通插件
8. 游戏主循环开始

patchers的特殊功能

从你的文件夹结构看,有2个patcher:
  1. Hamunii-AutoHookGenPatcher
    • 用途:自动生成Harmony的Hook代码
    • 为什么是patcher:需要在游戏程序集加载就准备好Hook生成器
  2. Hamunii-DetourContext_Dispose_Fix
    • 用途:修复Detour上下文的释放问题
    • 为什么是patcher:需要在其他插件使用Harmony修复基础框架

插件与patcher的关系

patcher插件              → 普通插件
(基础框架修复)           (功能实现)
    ↓
在Harmony库初始化时修复问题
    ↓
普通插件可以安全地使用Harmony
    ↓
实现各种游戏功能修改

配置文件的作用

config文件夹中确实有插件的配置,但配置不是加载插件的必要条件。BepInEx会:
  1. 扫描plugins文件夹加载所有.dll插件
  2. 在config中查找对应插件的配置文件
  3. 如果找到配置文件,加载配置
  4. 如果没找到,使用插件的默认配置,并在第一次运行时创建配置文件

完整的模组转移清单

如果你想完整迁移这个整合包,需要:

必需文件

BepInEx/
├── core/           ← 必需!没有它无法启动
├── plugins/        ← 必需!主功能
├── patchers/       ← 强烈建议!缺少可能导致崩溃
└── config/         ← 必需!否则插件用默认配置
    ├── 各插件配置
    └── Translation/ ← 翻译文件

可选但建议保留

BepInEx/
├── cache/          ← 可删除,会自动重新生成
└── LogOutput.log   ← 日志文件,可删除

实际工作流程举例

以你的整合包为例:
  1. 游戏启动​ → Doorstop加载winhttp.dll
  2. BepInEx Preloader​ → 从core加载框架核心
  3. 加载patchers​ → AutoHookGenPatcher准备Hook生成
  4. 游戏程序集加载​ → 此时patcher可以修改游戏代码
  5. 加载plugins​ → 所有功能插件加载
  6. 读取config​ → 应用各插件配置
  7. 游戏运行​ → 插件开始工作

为什么这样设计?

这种分层设计是为了解耦和稳定性
  • core:框架核心,稳定不变
  • patchers:底层修改,需要优先加载
  • plugins:功能实现,依赖patcher的基础
  • config:用户配置,随时可调整
如果你只复制plugins,会出现的典型问题:
  1. 某些插件找不到依赖的patcher而崩溃
  2. 插件使用默认配置,可能不是你期望的行为
  3. 缺少翻译文件,部分文本显示为英文
  4. 如果插件有资源文件在别处,可能完全无法运行
所以是的,完整的BepInEx文件夹结构需要作为一个整体来转移,每个部分都有其特定的作用和加载时机。
 
 
 以这个整合包为例子
这是REPO游戏(一款多人合作射击游戏)的BepInEx模组文件夹结构,包含了丰富的功能扩展和内容模组。

核心框架结构

BepInEx是Unity游戏的插件框架,通过非侵入式注入在游戏启动时加载,允许在不修改游戏原始代码的情况下扩展功能。这个整合包使用了完整的BepInEx生态:
  • cache:缓存文件夹,存储预处理结果
  • config:配置文件目录,包含SpawnConfig(生成配置)和Translation(翻译文件)
  • core:框架核心文件
  • patchers:高级插件文件夹,包含自动Hook生成和Detour修复补丁
  • plugins:主插件目录,所有功能模组都在这里

功能模组分类

基础功能库

  • Kistras-CustomDiscoverStateLib:自定义发现状态库
  • Lillious_Networks-REPO_Mod_Library:REPO模组库
  • MMHOOK:Harmony Hook库,用于方法拦截
  • XUnity.AutoTranslator:自动翻译器
  • XUnity.ResourceRedirector:资源重定向器
  • Zehs-REPOLib:REPO基础库

修复类模组

  • 【修复】力量升级、战绩面板、折扣修复:修复游戏原有问题
  • 【修复】拟声怪兼容:确保拟声怪特性与其他模组兼容

核心功能扩展

  • 【功能】中途加入
  • 【功能】伤害显示
  • 【功能】剩余价值
  • 【功能】回合重试
  • 【功能】地图投票
  • 【功能】垃圾回收
  • 【功能】多人模组
  • 【功能】按F扫描
  • 【功能】敌人血条
  • 【功能】显示怪物
  • 【功能】更多物品栏
  • 【功能】更多的商店物品
  • 【功能】模组配置
  • 【功能】玩家列表
  • 【功能】玩家计数
  • 【功能】生成管理器
  • 【功能】购买无限制

实用工具

  • 【实用】FPS显示
  • 【实用】复活20血
  • 【实用】提取点按钮
  • 【实用】缩放小车
  • 【实用】耐力优化
  • 【实用】防手电晃动

地图模组

包含9张自定义地图:军事基地、后室、废弃仓库、废弃地堡、我的世界、我的世界村庄、深邃矿洞、神秘设施、花亭小苑、荒废超市

特性模组

  • 【特性】关卡生成升级物品
  • 【特性】击杀奖励
  • 【特性】团队升级
  • 【特性】拟声怪
  • 【特性】提取复活
  • 【特性】猎人增强
  • 【特性】跳舞

装饰与外观

  • 【装饰】Nylyak化妆品、Zenless主题化妆品、原神迪奥娜、瓷器女仆、随机化妆品:各种角色外观装饰
  • 【装饰】下雪效果:界面下雪特效

内容扩展

  • 【废料】动漫物品
  • 【怪物】小利维坦、邪恶的猫
  • 【武器】ak
  • 【音效】鸭子新音效

技术实现

这个整合包使用了C#语言开发,基于.NET Framework运行。所有模组通过BepInEx的插件系统加载,利用Harmony库进行方法拦截和修改,实现游戏功能的扩展。配置系统使用TOML格式,支持实时配置更新。
 
posted @ 2026-01-10 15:34  BKYNEKO  阅读(4)  评论(0)    收藏  举报