首页/新闻资讯/正文详情

如何用 BepInEx 插件开发跑通第一个游戏 mod:从成就修改器到框架内部

发布时间:2026/11/6 1:44:27 来源:云帆数科 栏目:资讯中心
如何用 BepInEx 插件开发跑通第一个游戏 mod:从成就修改器到框架内部
如何用 BepInEx 插件开发跑通第一个游戏 mod从成就修改器到框架内部【免费下载链接】BepInExUnity / XNA game patcher and plugin framework项目地址: https://gitcode.com/GitHub_Trending/be/BepInExBepInEx 是一个面向 Unity Mono、Unity IL2CPP 与 .NET 框架游戏的插件 / modding 框架。游戏自身代码不会为改成就进度、调难度曲线留下任何接口本文以成就修改器为线索讲清第一个插件如何从零跑通以及框架里哪些模块值得花时间读一遍。从找不到入口到能挂钩框架定位与能力边界一个已发行的游戏里成就进度往往写在某个 MonoBehaviour 或静态管理器类的深处官方代码不开放任何钩子。难点不在想不想改而在从哪挂进去。BepInEx 的解法是两段式的启动阶段先用预加载器接管游戏进程待托管代码加载完成后再扫描插件目录、反射实例化各插件插件内部则用 Harmony 对运行时方法打补丁。它目前的能力边界如下选型前先看这张表运行时WindowsmacOSLinuxUnity Mono稳定稳定稳定Unity IL2CPP实验性不支持实验性.NET / XNA 系稳定需 Mono需 Mono需要强调截至目前只有 Unity Mono 目标是稳定发布其余两行是能力参考。️ 环境准备与最小可运行插件依赖与工具.NET SDK 6.0 或更高版本构建框架本体同样要求 6.0见 docs/BUILDING.mdVisual Studio 或 Rider 均可插件项目是一个普通的 classlib目标游戏已装好对应版本的 BepInEx编译出的 DLL 放入游戏根目录下的BepInEx/plugins如果想通读框架源码先克隆仓库git clone https://gitcode.com/GitHub_Trending/be/BepInEx最小可运行骨架Unity Mono 目标[BepInPlugin(dev.example.tuner, AchievementTuner, 0.1.0)] public class AchievementTuner : BaseUnityPlugin { private void Awake() { // Logger 与 Config 由 BaseUnityPlugin 构造时自动注入 Logger.LogInfo($插件已就绪宿主进程: {Paths.ProcessName}); } }注意两点插件工程要引用目标游戏BepInEx/core目录里的 BepInEx.Core.dll保证与运行时版本一致Unity Mono 插件的入口生命周期是Awake。 跑通一个成就进度修改器开发主流程四步目标行为是成就进度非零时强制拉满。流程固定为四步定位、打补丁、接配置、验证。定位目标方法先找到维护进度的类型与方法最省事的方式是反射列出候选类型靠日志肉眼筛选// 在 Awake 中执行把候选类型打到日志里 var gameAssembly AppDomain.CurrentDomain.GetAssemblies() .First(a a.GetName().Name Assembly-CSharp); foreach (var type in gameAssembly.GetTypes() .Where(t t.Name.Contains(Achievement))) Logger.LogDebug($候选类型: {type.FullName});确认方法签名后进入下一步。用 Harmony 打补丁用[HarmonyPatch]声明补丁类型再在Awake里一次性应用// 在 Awake 中按插件 GUID 命名 Harmony 实例并批量打补丁 Harmony.CreateAndPatchAll(Info.Metadata.GUID);[HarmonyPatch(typeof(AchievementTracker), UpdateProgress)] static class ProgressOverride { // Prefix 先于原方法执行ref 可把改写后的值传回 static void Prefix(ref int progress) { if (progress 0 progress 100) progress 100; } }配置项接入硬编码 100 不利于复用改用Config.Bind声明配置项值会持久化到BepInEx/config/插件GUID.cfgprivate ConfigEntryint TargetProgress; // Awake 中声明配置第二个参数是默认值 TargetProgress Config.Bind(Behavior, TargetProgress, 100, new ConfigDescription(进度非零时强制写入的目标值));把 Prefix 里的 100 替换为TargetProgress.Value即可。日志验证只在值真正被改写时打日志避免刷屏也便于确认补丁生效的时机static void Prefix(ref int progress) { var before progress; if (progress 0 progress Target) progress Target; if (progress ! before) Logger.LogInfo($成就进度 {before} - {progress}); } 关键模块速览配置、日志、加载与 Harmony配置管理ConfigFile源码BepInEx.Core/Configuration/ConfigFile.cs。核心类ConfigFile与ConfigEntryTTOML 格式的持久化配置全部公开方法线程安全BindT统一承载默认值、描述与取值。日志系统Logger 与监听器源码BepInEx.Core/Logging/Logger.cs。核心类Logger、DiskLogListener、ConsoleLogListener发布-订阅模型同一条日志可同时发往控制台、文件与 Unity 日志等多个监听器。插件加载Chainloader源码BepInEx.Core/Bootstrap/BaseChainloader.cs 与 BepInEx.Core/Bootstrap/TypeLoader.cs。用 Mono.Cecil 静态扫描插件程序集解析BepInPlugin属性元数据、校验 GUID 格式通过后才实例化——这也是很多插件没加载问题的根源所在。Harmony 集成Harmony 本体是外部库 HarmonyX由 BepInEx 项目引用仓库内 BepInEx.Preloader.Core/RuntimeFixes/HarmonyBackendFix.cs 负责修复 .NET 环境下 Harmony 后端的行为。插件侧只需写[HarmonyPatch]注解无需关心底层。 新手高频坑四个常见问题排错现象游戏在 IL2CPP 目标下行为异常甚至无法启动。原因IL2CPP 路径依赖 Il2CppInterop仍属实验阶段稳定发布只有 Unity Mono。解法先在 Mono 游戏上验证插件逻辑IL2CPP 参考Runtimes/Unity/BepInEx.Unity.IL2CPP/目录了解其独立管线。现象日志出现Skipping type [...] because its GUID [...] is of an illegal format。原因GUID 为空或含非法字符加载器只接受字母、数字、.、_、-。解法改用反向域名风格的标识符且同一 GUID 不要被两个插件复用否则配置文件与实例会互相串。现象BepInEx/config下找不到自己的 .cfg 文件。原因ConfigFile是惰性创建的配置项被修改或显式调用Save()之前不会落盘。解法插件启动阶段主动调用一次Config.Save()。现象找不到日志文件。原因日志写在BepInEx/Log/目录如UnityPlayer.log而不是游戏安装目录或 Managed 目录。解法直接打开该路径若控制台输出被游戏吞掉可调整doorstop_config.ini的redirect_output_log选项该配置的模板见 Runtimes/Unity/Doorstop/doorstop_config_mono.ini。延伸方向与下一步构建与发布流程以 docs/BUILDING.md 为准它描述了 CakeBuild 各 target 的用途。安装与使用说明以 BepInEx 官方文档站为准开发过程中的疑问可以直接在官方 Discord 社区提出。IL2CPP 实验实现的完整入口在 Runtimes/Unity/BepInEx.Unity.IL2CPP/Preloader.cs想研究跨运行时差异可以从这里开始。下一步建议成就修改器跑通之后换一个真实目标例如 UI 刷新逻辑或难度计算函数把定位 → 打补丁 → 接配置 → 验证这条流程再走一遍你会发现它对所有可注入的游戏逻辑都适用。【免费下载链接】BepInExUnity / XNA game patcher and plugin framework项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

NOIR手机隐私审计风险评分详解:完整拆解Rules、Classifier与Exposure组件
NOIR手机隐私审计风险评分详解:完整拆解Rules、Classifier与Exposure组件

网络安全应用安全隐私合规CLI静态分析逆向工程移动开发 【免费下载链接】NOIR 手机隐私审计:用 adb 扫出 Android 应用的权限、上报端点与数据流向,并给出可回滚的处置。Desktop Android leak audit: permissions, endpoints, data flows, reversible fi… · 2026/11/6 1:44:27

sam3_lora 多卡 DDP 分布式训练指南:NPU 上 fp32 陷阱、HBM OOM 与续训低学习率 3 大关键技巧
sam3_lora 多卡 DDP 分布式训练指南:NPU 上 fp32 陷阱、HBM OOM 与续训低学习率 3 大关键技巧

人工智能计算机视觉微调LoRA模型推理服务AscendCANNAI 技能 【免费下载链接】sam3_lora 模型文档仓库 项目地址: https://ai.gitcode.com/Ascend-SACT/sam3_lora 点击查看 免费下载 想在昇腾 NPU 上跑通 sam3_lora(SAM3 LoRA 微调)的多卡 DD… · 2026/11/6 1:44:27

mpv 配置实战:7 个高频场景,从能播到播好一次讲清
mpv 配置实战:7 个高频场景,从能播到播好一次讲清

mpv 配置实战:7 个高频场景,从能播到播好一次讲清 【免费下载链接】mpv 🎥 Command line media player 项目地址: https://gitcode.com/GitHub_Trending/mp/mpv mpv 是一款命令行起步、但完全带图形界面的开源媒体播放器,兼… · 2026/11/6 1:44:27

TSMaster中如何自定义27服务的安全算法?
TSMaster中如何自定义27服务的安全算法?

第一找到下面这个文件然后用Visual Studio 2022打开红色框是要实现的算法(可自定义),然后点击本地Window调试器,生成dll文件即可。注意:如果生成的文件是下面是文本文件(.log),并不是… · 2026/11/6 1:48:29

alertmanger 告警rule文件配置(三)
alertmanger 告警rule文件配置(三)

#案例2##服务器磁盘监控 groups: #----------------------------------生成环境--------------------------------------------------- name: ProdApplication1_disk_alertsrules:- alert: ProdApplication1_disk_usage_too_High # node_filesystem_avail_bytes{mountpo… · 2026/11/6 1:48:29

海外 B2B 企业的 YouTube,除了宣传片还能拍什么?
海外 B2B 企业的 YouTube,除了宣传片还能拍什么?

不少企业开设 YouTube 频道时,第一条视频是公司宣传片,后面陆续上传展会回顾、产品发布和工厂航拍。画面越来越丰富,销售却很难从中挑出一条,发给正在比较供应商的客户。 买家此时往往有更具体的问题:这台设备能否处理… · 2026/11/6 1:48:29

《汽车热管理系统:电子水泵单线PWM双向诊断机制》
《汽车热管理系统:电子水泵单线PWM双向诊断机制》

引言 在现代汽车热管理系统中,为了节省线束成本和接口空间,电子水泵普遍采用单线双向PWM通信。这意味着同一根信号线上,既承载着ECU(如BCM)下发的转速控制指令,又承载着水泵反馈的故障诊断脉冲。 在实际开… · 2026/11/6 1:48:29

新版|-|使用十周年以上手机电池健康80%的实验报告-超长日历时间超千次循环的普通消费品电池测评
新版|-|使用十周年以上手机电池健康80%的实验报告-超长日历时间超千次循环的普通消费品电池测评

实验结果实际为7plus 电池粗略校正 电池电量用到5%左右然后充满到100%。 实验设备如下:完整充放电过程一次:获取的全部数据ros2ros2-20l1a001cd:~$ idevicediagnostics ioregentry AppleARMPMUChargerIORegistryAbsoluteCapacity2460AdapterDetailsCurre… · 2026/11/6 1:48:29

ESP32-S3 有 8MB PSRAM 还是说内存不够之解决办法
ESP32-S3 有 8MB PSRAM 还是说内存不够之解决办法

ESP32-S3 有 8MB PSRAM 还是说内存不够之解决办法 上一篇:ESP32-S3 存的 Wi-Fi 密码自己就没了之解决办法 本文代码来自开源仓库 github.com/tangeai/xiaotai-esp32(主工程 lckfb-szpi-esp32s3-tirtc/)。配置取自 sdkconfig.defaults&#xf… · 2026/11/6 1:47:27

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07

三菱PLC数据采集到数据库的时序设计:Python+MC协议实战
三菱PLC数据采集到数据库的时序设计:Python+MC协议实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

ASIC主模式RTL设计:状态机与三态驱动的流片级实现
ASIC主模式RTL设计:状态机与三态驱动的流片级实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

STM32嵌入式C++开发:GDB调试与Renode仿真实战指南
STM32嵌入式C++开发:GDB调试与Renode仿真实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码