ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

BepInEx 6.0 上手:IL2CPP 下 4 步搞定插件框架搭建

BepInEx 6.0 上手:IL2CPP 下 4 步搞定插件框架搭建 BepInEx 6.0 上手IL2CPP 下 4 步搞定插件框架搭建【免费下载链接】BepInExUnity / XNA game patcher and plugin framework项目地址: https://gitcode.com/GitHub_Trending/be/BepInExBepInEx 6.0 是面向 Unity 与 .NET 游戏的插件框架Mono 和 IL2CPP 后端都支持。下面用 4 步把核心运行时构建出来配好门挡让 IL2CPP 游戏里的第一个插件跑起来。环境与前置条件项目要求.NET SDK6.0 及以上CakeBuild 硬性要求操作系统Windows x64 / Linux x64⚠️ macOS 不支持 IL2CPP 后端目标游戏Unity Mono 或 IL2CPPIL2CPP 需先跑 Cpp2IL 导出游戏 DLL版本线Unity Mono 是唯一稳定发行IL2CPP 属 bleeding edge问题多一些快速验证一下工具链dotnet --version # 关键输出版本号需 6.0 或更高不满足的话先装 SDK后面所有构建步骤都依赖它。核心概念速览Doorstop怎么配置游戏门挡Doorstop 是注入库Linux 用 LD_PRELOAD、macOS 用 DYLD_INSERT_LIBRARIES、Windows 用 DLL 前置在游戏主循环启动前接管进程。它的唯一职责是把启动流程转给 BepInEx 预加载器入口签名固定为static void Doorstop.Entrypoint.Start()。预加载器与链加载器分工预加载器负责运行时程序集补丁、IL2CPP 下拉起 CoreCLR链加载器BaseChainloader扫描插件 DLL、解析依赖、按序实例化。插件加载失败基本落在这两段之一排查时先分清是哪一环。BepInPlugin 属性插件三要素插件类靠[BepInPlugin(GUID, Name, Version)]被识别。GUID 必须匹配^[a-zA-Z0-9._-]$缺属性或格式非法时链加载器直接跳过该类型这是插件没加载的头号原因。Il2CppInteropIL2CPP 类型桥怎么做IL2CPP 把 C# 编译成 C运行时缺少托管类型元数据。Il2CppInterop 基于 Cpp2IL 导出的游戏 DLL 生成 C# 类型代理再与原生类型双向映射。IL2CPP 游戏能跑插件全靠它。实操路径拉取并锁定版本IL2CPP 线 API 变动频繁别在 main 上直接折腾锁到发布 tag。git clone https://gitcode.com/GitHub_Trending/be/BepInEx cd BepInEx git checkout tags/6.0.0-be.725验证要点git describe --tags输出应为 6.0.0-be.725。构建核心运行时用官方 CakeBuild 脚本依赖如 HarmonyX、MonoMod 会自动拉取。# 关键MakeDist 会在 bin/dist 生成完整部署包 ./build.sh --target MakeDist # Windows 下等价命令是 build.cmd --target MakeDist验证要点打开 bin/dist确认 IL2CPP 运行时包里有BepInEx/core和dotnet两个目录。注入门挡配置模板在仓库 Runtimes/Unity/Doorstop/ 下IL2CPP 用 doorstop_config_il2cpp.ini关键三项target_assembly BepInEx\core\BepInEx.Unity.IL2CPP.dll coreclr_path dotnet\coreclr.dll # 关键CoreCLR 托管库目录指向游戏内 dotnet 目录 corlib_dir dotnetLinux/macOS 走 run_bepinex_il2cpp.sh 启动脚本记得填executable_name。验证要点ls确认 target_assembly 与 coreclr_path 在游戏目录内真实存在任一缺失预加载器会直接退出。跑通最小插件写一个最小插件编译成 DLL丢进游戏根目录BepInEx/plugins/[BepInPlugin(com.example.hello, Hello, 1.0.0)] public class Hello : BaseUnityPlugin { private void Awake() Log.Info(Hello from BepInEx); }用第三步的门挡脚本启动游戏。验证要点grepBepInEx/LogOutput.log 里新插件的 GUID出现即整条链路跑通。关键模块拆解BepInEx.Core/Bootstrap/BaseChainloader.cs 管插件扫描、GUID 校验与依赖解析改加载逻辑看这里。BepInEx.Preloader.Core/Patching/PatcherPluginInfo 与 TargetAssembly/TargetType 属性定义运行时程序集补丁的声明入口。Runtimes/Unity/BepInEx.Unity.IL2CPP/Il2CppInteropManager.cs 是类型桥核心Hook/ 下是 Dobby 与 Funchook 两套原生函数拦截。踩坑速查症状大概率原因30 秒验证法Linux 脚本报 Please set executable_name.sh 里 executable_name 变量为空看脚本前 15 行填上游戏 exe 名游戏没进主界面多了个 preloader_*.logtarget_assembly 或 coreclr_path 指向不存在的路径ls BepInEx/core和ls dotnet看文件是否都在日志有 Skipping over type插件数为 0GUID 格式非法或类没继承 BaseUnityPlugingrep Skipping LogOutput.log 看具体原因IL2CPP 游戏弹 Failed to start BepInExdotnet 目录缺失CoreCLR 加载失败ls dotnet/coreclr.dll缺了就重新部署 bin/dist 完整包部署到 macOS 后 IL2CPP 完全不工作平台不支持见 README 兼容表换 Windows 或 Linux别在这上面耗时间延伸与资源docs/BUILDING.md官方构建文档Compile / MakeDist / Publish 三个目标各有用途Runtimes/Unity/Doorstop/Mono 与 IL2CPP 两套门挡配置模板和启动脚本BepInEx.Preloader.Core/Patching/patcher 插件声明源码适合精读补丁 API下一步建议挑一个现有 patcher 读懂 TargetType 的用法然后给自己写的插件加一个方法替换补丁。【免费下载链接】BepInExUnity / XNA game patcher and plugin framework项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表