三步接管 RE 引擎游戏:REFramework 游戏内菜单、Lua 脚本与 C++ 插件一次讲透
【免费下载链接】REFrameworkMod loader, scripting platform, and VR support for all RE Engine games项目地址: https://gitcode.com/GitHub_Trending/re/REFramework
想改游戏,却不想动游戏本体的任何一个文件?REFramework 就是为此而生的 RE 引擎游戏 mod 框架(覆盖《生化危机》系列、《鬼泣 5》《街霸 6》《怪物猎人》等)——往游戏目录放一个 dinput8.dll,进游戏按 Insert 键,游戏内菜单随即弹出,能跑 Lua 脚本、加载 C++ 插件,还能接入 VR。
先让框架进游戏:dinput8.dll 放置位置与 Insert 菜单验证
📥 框架本体是一个伪装成 DirectInput 输入库的dinput8.dll,游戏加载它时渲染钩子就被接管,DirectX 11 和 12 都支持。从官方 Releases 页拿稳定版 zip,追求新特性可以选 Nightly 开发版。放置规则分两种情况:
- 非 VR 用户:只解压出
dinput8.dll,放进游戏根目录,和游戏主.exe同级 - VR 用户:先装 SteamVR(OpenXR 头显除外),再把整个 zip 包解压到游戏目录
Linux 玩家则在 Steam 游戏属性的启动选项里加这一行,进游戏后效果相同:
WINEDLLOVERRIDES="dinput8.dll=n,b" %command%验收标准:游戏正常进入后按 Insert 键(默认菜单键,菜单里可改),弹出一个覆盖式窗口,里面分区块列出 Script Runner、各内置 mod 和 VR 设置——菜单窗口出现,就说明注入成功。框架支持《生化危机 2/3/4/7/Village/Requiem》《鬼泣 5》《街霸 6》《怪物猎人 Rise/Wilds/Stories 3》《龙之信条 2》《死亡之岛豪华重制版》《鬼武者》等 RE 引擎作品。窗口里装好的功能开箱即用:Free Camera、FOV 滑块、时间缩放、暗角关闭、超宽屏修复、GUI 隐藏(全游戏通用),First Person(RE2/RE3)、Manual Flashlight(RE2/RE3/RE8);开发者模式另带 Game Objects Display 和 Object Explorer 两个看场景对象的小工具。
从菜单到第一段 Lua:写出第一个 REFramework Lua 脚本
💻 打开菜单里的 Script Runner 区块,三个按钮各管一摊:Run script弹文件选择框,选中.lua立即执行;Reset scripts卸载全部已加载脚本;Spawn Debug Console弹出调试控制台(可勾选开机自动打开)。注意框架要等日志打出 "Scene and scene manager found. Loading scripts..." 之后才开始真正加载脚本。
在游戏目录新建my_first.lua,写入下面内容,用Run script加载:
local get_go = sdk.find_type_definition("via.Component"):get_method("get_GameObject") re.on_frame(function() local cam = sdk.get_primary_camera() if cam then print("主相机: " .. tostring(get_go(cam))) end end)sdk是操作游戏托管对象的统一入口:find_type_definition("类型全名")拿到类型,:get_method("方法名")拿到方法再:call调用,sdk.get_primary_camera这类是常用快捷方式。方法指针(get_method的返回值)在脚本顶部取一次存起来,别在每帧里重复查找。
验收标准:调试控制台里稳定刷出相机对应的 GameObject 信息,说明re.on_frame回调已经挂上。
想直接拿玩家对象,用仓库自带的 scripts/utility/ 工具库:require("utility/RE2")一步拿到玩家(前提是把整个 scripts/ 目录放进游戏目录),完整"类型 → 方法 → 对象"链路可对照 scripts/re2_smooth_movement.lua 读一遍。面板里的 Known scripts 复选框还能单独开关某个脚本。
编译并投放第一个 C++ 插件:REFramework 插件开发流程
🔧 准备一个 C++23 编译器(推荐 Visual Studio 2022)和 CMake,然后取源码:
git clone https://gitcode.com/GitHub_Trending/re/REFramework git submodule update --init --recursive接着两条路任选:跑仓库根目录的build_vs2022.bat构建全部游戏目标;或者在 cmake --build 命令后加--target RE2只构建一个游戏,省掉全量编译的时间。examples/example_plugin/ 是最完整的参照物,重点读三处:导出函数reframework_plugin_required_version声明插件版本和适配的游戏名;reframework_plugin_initialize注册各生命周期回调;以及 D3D11/D3D12 双后端初始化和用create_script_state创建独立 Lua state 沙箱的写法。通读一遍胜过翻文档。
投放走自动加载机制:游戏启动时框架会扫描持久目录下的reframework/plugins/并加载里面每个.dll,文件名就是插件名。流程固定为:编译出 DLL → 放进reframework/plugins/→ 重启游戏。一个 DLL 就是一个完整插件,分享给别人只需把文件发过去。
验收标准:日志里没有[Plugin] error,菜单的插件列表里能看到你这个文件名。
踩坑前先读这里:脚本报错怎么查与三个高频坑
⚠️ 排查入口就两个。Script Runner 面板常驻一块红字区,显示 Last Script Error 和报错距现在多少秒;再勾上Log Lua Errors to Disk,所有 Lua 错误会同步落到磁盘日志,配合调试控制台可以实时定位。
三个高频坑,先记住再动手:
- 在线对局下脚本会被整体卸载,面板会明确提示"scripts have been unloaded"——这是设计行为,单机模式才生效
- DLL 放错位置:
dinput8.dll必须和游戏主程序同级;VR 用户只放了单文件却期望 VR 功能,就会"看起来没生效" - os 库被沙箱裁剪:
os.remove/execute/getenv等已被禁用,脚本里删文件、读写文件请改用fs绑定
内存方面,面板里的 Garbage Collection Stats 显示当前 MB 占用,下方是 GC Handler / Mode / Budget 参数,每帧由框架统一回收。经验法则:re.on_frame回调里只做增量计算,重活挪出去。验收标准:Stats 数值稳定不再上涨,说明回收节奏已调好。
从自用到分发:打包作品与查文档的去处
📦 C++ 插件的成品就是一个 DLL(有资源文件就一并附上),Lua 脚本就是一个.lua(依赖工具库的话把 scripts/utility/ 一起带走)。分发说明一句话就够:"放入reframework/plugins/或游戏目录,重启游戏。"
资料按用途各查各的:Lua API 的第一手资料是官方 Wiki(refdocs);C++ 插件 API 的准确定义看仓库里的 include/reframework/ 头文件;各游戏的 Lua 实战脚本在 scripts/(按re2_xxx、re4_xxx命名区分);C++ 插件骨架看 examples/example_plugin/。
读完后做三件观察任务
🧪 每个任务只动一处,观察一处变化:
- 把 scripts/re2_smooth_movement.lua 顶部的
alpha平滑系数从 0.05 改成 0.5,加载后走动几步,体会移动跟手程度的差别,再用Reset scripts卸载对比一次 - 在脚本里故意调一个不存在的方法,打开
Log Lua Errors to Disk,核对面板红字与磁盘日志是否对得上,确认自己已经会读报错 - 编译 examples/example_plugin/ 的示例,把 DLL 随意改个名丢进
reframework/plugins/,观察菜单插件列表里显示的名字是否随文件名一起变——变了,说明你已经理解"文件名即插件名"
【免费下载链接】REFrameworkMod loader, scripting platform, and VR support for all RE Engine games项目地址: https://gitcode.com/GitHub_Trending/re/REFramework
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考