菜單、Lua 腳本與 C++ 插件一次講透)
三步接管 RE 引擎游戲REFramework 游戲內(nèi)菜單、Lua 腳本與 C 插件一次講透【免費(fèi)下載鏈接】REFrameworkMod loader, scripting platform, and VR support for all RE Engine games項(xiàng)目地址: https://gitcode.com/GitHub_Trending/re/REFramework想改游戲卻不想動(dòng)游戲本體的任何一個(gè)文件REFramework 就是為此而生的 RE 引擎游戲 mod 框架覆蓋《生化危機(jī)》系列、《鬼泣 5》《街霸 6》《怪物獵人》等——往游戲目錄放一個(gè) dinput8.dll進(jìn)游戲按 Insert 鍵游戲內(nèi)菜單隨即彈出能跑 Lua 腳本、加載 C 插件還能接入 VR。先讓框架進(jìn)游戲dinput8.dll 放置位置與 Insert 菜單驗(yàn)證 框架本體是一個(gè)偽裝成 DirectInput 輸入庫的dinput8.dll游戲加載它時(shí)渲染鉤子就被接管DirectX 11 和 12 都支持。從官方 Releases 頁拿穩(wěn)定版 zip追求新特性可以選 Nightly 開發(fā)版。放置規(guī)則分兩種情況非 VR 用戶只解壓出dinput8.dll放進(jìn)游戲根目錄和游戲主.exe同級(jí)VR 用戶先裝 SteamVROpenXR 頭顯除外再把整個(gè) zip 包解壓到游戲目錄Linux 玩家則在 Steam 游戲?qū)傩缘膯?dòng)選項(xiàng)里加這一行進(jìn)游戲后效果相同WINEDLLOVERRIDESdinput8.dlln,b %command%驗(yàn)收標(biāo)準(zhǔn)游戲正常進(jìn)入后按 Insert 鍵默認(rèn)菜單鍵菜單里可改彈出一個(gè)覆蓋式窗口里面分區(qū)塊列出 Script Runner、各內(nèi)置 mod 和 VR 設(shè)置——菜單窗口出現(xiàn)就說明注入成功??蚣苤С帧渡C(jī) 2/3/4/7/Village/Requiem》《鬼泣 5》《街霸 6》《怪物獵人 Rise/Wilds/Stories 3》《龍之信條 2》《死亡之島豪華重制版》《鬼武者》等 RE 引擎作品。窗口里裝好的功能開箱即用Free Camera、FOV 滑塊、時(shí)間縮放、暗角關(guān)閉、超寬屏修復(fù)、GUI 隱藏全游戲通用First PersonRE2/RE3、Manual FlashlightRE2/RE3/RE8開發(fā)者模式另帶 Game Objects Display 和 Object Explorer 兩個(gè)看場(chǎng)景對(duì)象的小工具。從菜單到第一段 Lua寫出第一個(gè) REFramework Lua 腳本 打開菜單里的 Script Runner 區(qū)塊三個(gè)按鈕各管一攤Run script彈文件選擇框選中.lua立即執(zhí)行Reset scripts卸載全部已加載腳本Spawn Debug Console彈出調(diào)試控制臺(tái)可勾選開機(jī)自動(dòng)打開。注意框架要等日志打出 Scene and scene manager found. Loading scripts... 之后才開始真正加載腳本。在游戲目錄新建my_first.lua寫入下面內(nèi)容用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(主相機(jī): .. tostring(get_go(cam))) end end)sdk是操作游戲托管對(duì)象的統(tǒng)一入口find_type_definition(類型全名)拿到類型:get_method(方法名)拿到方法再:call調(diào)用sdk.get_primary_camera這類是常用快捷方式。方法指針get_method的返回值在腳本頂部取一次存起來別在每幀里重復(fù)查找。驗(yàn)收標(biāo)準(zhǔn)調(diào)試控制臺(tái)里穩(wěn)定刷出相機(jī)對(duì)應(yīng)的 GameObject 信息說明re.on_frame回調(diào)已經(jīng)掛上。想直接拿玩家對(duì)象用倉庫自帶的 scripts/utility/ 工具庫require(utility/RE2)一步拿到玩家前提是把整個(gè) scripts/ 目錄放進(jìn)游戲目錄完整類型 → 方法 → 對(duì)象鏈路可對(duì)照 scripts/re2_smooth_movement.lua 讀一遍。面板里的 Known scripts 復(fù)選框還能單獨(dú)開關(guān)某個(gè)腳本。編譯并投放第一個(gè) C 插件REFramework 插件開發(fā)流程 準(zhǔn)備一個(gè) C23 編譯器推薦 Visual Studio 2022和 CMake然后取源碼git clone https://gitcode.com/GitHub_Trending/re/REFramework git submodule update --init --recursive接著兩條路任選跑倉庫根目錄的build_vs2022.bat構(gòu)建全部游戲目標(biāo)或者在 cmake --build 命令后加--target RE2只構(gòu)建一個(gè)游戲省掉全量編譯的時(shí)間。examples/example_plugin/ 是最完整的參照物重點(diǎn)讀三處導(dǎo)出函數(shù)reframework_plugin_required_version聲明插件版本和適配的游戲名reframework_plugin_initialize注冊(cè)各生命周期回調(diào)以及 D3D11/D3D12 雙后端初始化和用create_script_state創(chuàng)建獨(dú)立 Lua state 沙箱的寫法。通讀一遍勝過翻文檔。投放走自動(dòng)加載機(jī)制游戲啟動(dòng)時(shí)框架會(huì)掃描持久目錄下的reframework/plugins/并加載里面每個(gè).dll文件名就是插件名。流程固定為編譯出 DLL → 放進(jìn)reframework/plugins/→ 重啟游戲。一個(gè) DLL 就是一個(gè)完整插件分享給別人只需把文件發(fā)過去。驗(yàn)收標(biāo)準(zhǔn)日志里沒有[Plugin] error菜單的插件列表里能看到你這個(gè)文件名。踩坑前先讀這里腳本報(bào)錯(cuò)怎么查與三個(gè)高頻坑?? 排查入口就兩個(gè)。Script Runner 面板常駐一塊紅字區(qū)顯示 Last Script Error 和報(bào)錯(cuò)距現(xiàn)在多少秒再勾上Log Lua Errors to Disk所有 Lua 錯(cuò)誤會(huì)同步落到磁盤日志配合調(diào)試控制臺(tái)可以實(shí)時(shí)定位。三個(gè)高頻坑先記住再動(dòng)手在線對(duì)局下腳本會(huì)被整體卸載面板會(huì)明確提示scripts have been unloaded——這是設(shè)計(jì)行為單機(jī)模式才生效DLL 放錯(cuò)位置dinput8.dll必須和游戲主程序同級(jí)VR 用戶只放了單文件卻期望 VR 功能就會(huì)看起來沒生效os 庫被沙箱裁剪os.remove/execute/getenv等已被禁用腳本里刪文件、讀寫文件請(qǐng)改用fs綁定內(nèi)存方面面板里的 Garbage Collection Stats 顯示當(dāng)前 MB 占用下方是 GC Handler / Mode / Budget 參數(shù)每幀由框架統(tǒng)一回收。經(jīng)驗(yàn)法則re.on_frame回調(diào)里只做增量計(jì)算重活挪出去。驗(yàn)收標(biāo)準(zhǔn)Stats 數(shù)值穩(wěn)定不再上漲說明回收節(jié)奏已調(diào)好。從自用到分發(fā)打包作品與查文檔的去處 C 插件的成品就是一個(gè) DLL有資源文件就一并附上Lua 腳本就是一個(gè).lua依賴工具庫的話把 scripts/utility/ 一起帶走。分發(fā)說明一句話就夠放入reframework/plugins/或游戲目錄重啟游戲。資料按用途各查各的Lua API 的第一手資料是官方 WikirefdocsC 插件 API 的準(zhǔn)確定義看倉庫里的 include/reframework/ 頭文件各游戲的 Lua 實(shí)戰(zhàn)腳本在 scripts/按re2_xxx、re4_xxx命名區(qū)分C 插件骨架看 examples/example_plugin/。讀完后做三件觀察任務(wù) 每個(gè)任務(wù)只動(dòng)一處觀察一處變化把 scripts/re2_smooth_movement.lua 頂部的alpha平滑系數(shù)從 0.05 改成 0.5加載后走動(dòng)幾步體會(huì)移動(dòng)跟手程度的差別再用Reset scripts卸載對(duì)比一次在腳本里故意調(diào)一個(gè)不存在的方法打開Log Lua Errors to Disk核對(duì)面板紅字與磁盤日志是否對(duì)得上確認(rèn)自己已經(jīng)會(huì)讀報(bào)錯(cuò)編譯 examples/example_plugin/ 的示例把 DLL 隨意改個(gè)名丟進(jìn)reframework/plugins/觀察菜單插件列表里顯示的名字是否隨文件名一起變——變了說明你已經(jīng)理解文件名即插件名【免費(fèi)下載鏈接】REFrameworkMod loader, scripting platform, and VR support for all RE Engine games項(xiàng)目地址: https://gitcode.com/GitHub_Trending/re/REFramework創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考