戰(zhàn):用自研 UE 插件 + MCP 服務(wù)打通虛幻編輯器 AI 協(xié)同開發(fā))
1. 為什么要在虛幻編輯器里折騰 AI 協(xié)同開發(fā)如果你正在做 UE 項(xiàng)目大概率遇到過這種場景策劃說“給我在關(guān)卡里批量擺 50 個(gè)可交互道具”你打開編輯器一個(gè)個(gè)拖藍(lán)圖、加組件、連變量半小時(shí)過去了?;蛘咝马?xiàng)目啟動(dòng)GameMode、PlayerController、Enhanced Input 的 Action 和 Mapping 要手動(dòng)配一遍重復(fù)勞動(dòng)拉滿。AIUEBridge 就是沖著這個(gè)痛點(diǎn)來的——它把虛幻編輯器的能力封裝成 AI 可調(diào)用的工具集讓大模型規(guī)劃、MCP 服務(wù)通信、UE 插件執(zhí)行三層各司其職最終實(shí)現(xiàn)“自然語言描述需求 → 編輯器里自動(dòng)落盤”的閉環(huán)。這套東西適合誰一是想用 Cursor 或本地 Ollama 驅(qū)動(dòng) UE 做原型驗(yàn)證的獨(dú)立開發(fā)者二是團(tuán)隊(duì)里想搭一套“AI 搭框架、C 寫交互”工作流的 TD三是單純想看看 MCP 協(xié)議在游戲工具鏈里怎么落地的技術(shù)愛好者。它不替代編輯器也不替代你寫 C而是把那些重復(fù)的、結(jié)構(gòu)化的編輯器操作暴露成 HTTP Tool讓 AI 能真正“動(dòng)手”。我試過在 UE 5.3 里跑通整條鏈路從插件加載到 MCP 服務(wù)連通再到用 curl 創(chuàng)建藍(lán)圖、導(dǎo)出 Cursor 上下文中間踩了一些端口和配置的坑。下面按可復(fù)制的步驟拆開講你跟著做就能在自己的項(xiàng)目里落地。2. TaoToken 前置給 AI 層準(zhǔn)備一個(gè)穩(wěn)定的模型入口AIUEBridge 的架構(gòu)里AI 規(guī)劃層是獨(dú)立于 UE 執(zhí)行層的。你可以用 Cursor 內(nèi)置的模型也可以用 Ollama 本地跑 qwen2.5:7b。但如果你想讓規(guī)劃層更穩(wěn)定、支持更長的上下文和更可靠的 function calling建議給 AI 層配一個(gè)統(tǒng)一的模型接入點(diǎn)。TaoToken 在這里的角色就是模型對話與 API 調(diào)用的入口不碰你的 UE 工程只負(fù)責(zé)把自然語言請求轉(zhuǎn)成結(jié)構(gòu)化的 Tool 調(diào)用意圖。具體操作上你需要在 TaoToken 控制臺創(chuàng)建一個(gè) API Key然后把它配置到你的 AI 客戶端或 MCP 服務(wù)的環(huán)境變量里。如果你用的是 Cursor可以在 Cursor 的模型設(shè)置里填入自定義 API 地址和 Key如果你用的是自己寫的 FastAPI Web Agent就在.env里加一行TAOTOKEN_API_KEY你的key然后在調(diào)用模型時(shí)把 base_url 指向https://taotoken.net/api。這里有個(gè)細(xì)節(jié)AIUEBridge 的 MCP Server 本身不綁定具體模型它只負(fù)責(zé)把 Tool Schema 暴露給 MCP 客戶端。所以你可以讓 Cursor 通過 MCP 協(xié)議調(diào)用 AIUEBridge 的工具同時(shí)讓 Cursor 自己用 TaoToken 的模型來做規(guī)劃。這樣規(guī)劃層和執(zhí)行層解耦換模型不用動(dòng) UE 插件。如果你還沒建 Key可以直接去 TaoToken API Keys 頁面 創(chuàng)建一個(gè)記得把 Key 存到環(huán)境變量里別硬編碼進(jìn)代碼。3. 可復(fù)制配置UE 插件 MCP 服務(wù) Cursor 接入3.1 UE 插件側(cè)確認(rèn) HTTP 服務(wù)端口AIUEBridge 插件加載后會(huì)在編輯器內(nèi)啟動(dòng)一個(gè) HTTP Server默認(rèn)監(jiān)聽18765。你打開AIUEBridgeTest.uproject在 Output Log 里應(yīng)該能看到LogAIUEBridge: AIUEBridge HTTP server started on port 18765如果沒看到檢查插件是否在 Plugins 目錄下啟用以及 UE 版本是否匹配。端口可以在插件配置里改但改完要同步改 MCP 服務(wù)那邊的UE_BRIDGE_URL。3.2 MCP 服務(wù)側(cè)Python 環(huán)境與 .env 配置進(jìn)入mcp_server目錄復(fù)制配置模板并創(chuàng)建虛擬環(huán)境cd mcp_server copy .env.example .env python -m venv .venv .venv\Scripts\activate pip install -r requirements.txt然后編輯.env關(guān)鍵變量如下UE_BRIDGE_URLhttp://127.0.0.1:18765 OLLAMA_URLhttp://127.0.0.1:11434 OLLAMA_MODELqwen2.5:7b WEB_PORT8080 MAX_TOOL_ROUNDS8 ENABLE_SHELLtrue如果你用 TaoToken 作為模型入口可以額外加TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_API_KEY你的key注意UE_BRIDGE_URL的端口必須和 UE 插件里的 MCPPort 一致否則 Web GUI 狀態(tài)燈會(huì)紅。3.3 Cursor MCP 接入.cursor/mcp.json在項(xiàng)目根目錄創(chuàng)建.cursor/mcp.json把 AIUEBridge 的 MCP Server 注冊進(jìn)去{ mcpServers: { aiue-bridge: { command: C:/path/to/mcp_server/.venv/Scripts/python.exe, args: [C:/path/to/AIUEBridge/mcp_server/server.py], env: { UE_BRIDGE_URL: http://127.0.0.1:18765 } } } }保存后重啟 Cursor在 MCP 面板里應(yīng)該能看到aiue-bridge已連接。如果連不上先確認(rèn)server.py能單獨(dú)跑起來再檢查路徑里的反斜杠和空格。3.4 啟動(dòng)順序與狀態(tài)驗(yàn)證日常使用保持三個(gè)服務(wù)同時(shí)開著服務(wù)驗(yàn)證方式預(yù)期結(jié)果UE 編輯器 插件curl http://127.0.0.1:18765/api/health{status:ok,service:AIUEBridge,port:18765}Ollama瀏覽器打開http://127.0.0.1:11434頁面可訪問Web GUIpython web_app.py后打開http://127.0.0.1:8080左側(cè)狀態(tài)燈綠Web GUI 左側(cè)有兩個(gè)狀態(tài)燈UE 插件綠、Ollama 綠才代表可以正常發(fā)指令。如果 Ollama 紅燈先ollama serve再ollama pull qwen2.5:7b。4. 驗(yàn)證請求從 curl 到 Web GUI 的完整鏈路4.1 健康檢查與創(chuàng)建藍(lán)圖先用 curl 確認(rèn)插件 HTTP 服務(wù)活著curl http://127.0.0.1:18765/api/health返回{status:ok,service:AIUEBridge,port:18765}就說明 UE 側(cè)沒問題。接著創(chuàng)建一個(gè) Actor 藍(lán)圖curl -X POST http://127.0.0.1:18765/api/tool/execute \ -H Content-Type: application/json \ -d {\tool\:\create_blueprint\,\params\:{\name\:\BP_Enemy\,\path\:\/Game/Characters\,\parent_class\:\Actor\}}執(zhí)行后去 Content Browser 的/Game/Characters下看應(yīng)該多了BP_Enemy。如果報(bào)錯(cuò)檢查路徑是否存在/Game/Characters目錄需要提前建好。4.2 添加組件與導(dǎo)出 Cursor 上下文給剛創(chuàng)建的藍(lán)圖加一個(gè) StaticMeshComponentcurl -X POST http://127.0.0.1:18765/api/tool/execute \ -H Content-Type: application/json \ -d {\tool\:\add_component\,\params\:{\asset_path\:\/Game/Characters/BP_Enemy\,\component_class\:\StaticMeshComponent\,\component_name\:\Mesh\}}然后導(dǎo)出藍(lán)圖上下文給 Cursor 寫 Ccurl -X POST http://127.0.0.1:18765/api/tool/execute \ -H Content-Type: application/json \ -d {\tool\:\export_for_cursor\,\params\:{\path\:\/Game\,\write_to_file\:true}}這會(huì)在項(xiàng)目里生成cursor_blueprint_context.md里面包含藍(lán)圖結(jié)構(gòu)、組件、變量、Input 映射等信息。你在 Cursor 里用引用這個(gè) md就能讓 AI 基于現(xiàn)有藍(lán)圖生成對應(yīng)的 C 類。4.3 Web GUI 自然語言操作不想記 curl 命令的話直接開 Web GUIpython web_app.py瀏覽器打開http://127.0.0.1:8080在輸入框里寫在 /Game/Test 下創(chuàng)建一個(gè)名為 BP_Demo 的 Actor 藍(lán)圖AI 回復(fù)下方會(huì)顯示“執(zhí)行了 N 個(gè) UE 工具”點(diǎn)開能看到具體的 Tool 調(diào)用日志。左側(cè)還有快捷指令按鈕比如“列出藍(lán)圖”“搜索 Player”一鍵觸發(fā)對應(yīng) Tool。4.4 一鍵 GameMode 配置新項(xiàng)目腳手架可以用三個(gè) Tool 串起來# 創(chuàng)建 GameMode 藍(lán)圖 curl -X POST http://127.0.0.1:18765/api/tool/execute \ -H Content-Type: application/json \ -d {\tool\:\create_blueprint\,\params\:{\name\:\BP_GameMode2\,\path\:\/Game/Core\,\parent_class\:\GameModeBase\}} # 配置 GameMode 的 Classes curl -X POST http://127.0.0.1:18765/api/tool/execute \ -H Content-Type: application/json \ -d {\tool\:\configure_game_mode\,\params\:{\asset_path\:\/Game/Core/BP_GameMode2\,\pawn_class\:\BP_PlayerPawn\,\controller_class\:\BP_PlayerController\}} # 設(shè)為項(xiàng)目默認(rèn) GameMode curl -X POST http://127.0.0.1:18765/api/tool/execute \ -H Content-Type: application/json \ -d {\tool\:\set_project_default_game_mode\,\params\:{\game_mode_path\:\/Game/Core/BP_GameMode2\}}這套流程跑通后從需求到可運(yùn)行框架的時(shí)間能壓到幾分鐘。5. 本篇常見錯(cuò)排查Web GUI 打不開先確認(rèn)python web_app.py在跑端口 8080 沒被占用。如果改了WEB_PORT瀏覽器地址也要跟著改。UE 狀態(tài)燈紅檢查 UE 編輯器是否打開、插件是否加載、Output Log 里有沒有HTTP server started on port 18765。如果端口被占改插件端口后同步改.env里的UE_BRIDGE_URL。Ollama 狀態(tài)燈紅ollama serve是否在跑模型是否已 pull。OLLAMA_MODEL要和實(shí)際拉取的模型名一致比如qwen2.5:7b。發(fā)送指令后 AI 不操作 UE大概率是模型不支持 function calling。換qwen2.5:7b或通過 TaoToken 接入支持工具調(diào)用的模型。另外檢查MAX_TOOL_ROUNDS是否太小復(fù)雜任務(wù)可以調(diào)到 12。端口不一致UE 插件里的 MCPPort 和.env里的UE_BRIDGE_URL必須一致。改完.env要重啟web_app.py改完插件端口要重啟 UE 編輯器。Cursor MCP 連不上檢查.cursor/mcp.json里的 Python 路徑是否正確server.py是否能單獨(dú)運(yùn)行。Windows 路徑用正斜杠或雙反斜杠避免轉(zhuǎn)義問題。export_for_cursor 沒生成文件確認(rèn)write_to_file傳了true以及 UE 項(xiàng)目目錄有寫權(quán)限。生成的文件默認(rèn)在項(xiàng)目根目錄文件名是cursor_blueprint_context.md。改了 .env 不生效所有.env改動(dòng)都需要重啟對應(yīng)的 Python 服務(wù)。Web GUI、MCP Server、CLI 各自讀環(huán)境變量重啟哪個(gè)生效哪個(gè)。6. 把 AI 協(xié)同開發(fā)鏈路真正用起來整條鏈路跑通后你手里其實(shí)有了三樣?xùn)|西一個(gè)能被 AI 調(diào)用的 UE 執(zhí)行層28 個(gè) Tool 覆蓋藍(lán)圖、組件、Input、GameMode、UMG、DataTable、GameplayTag一個(gè)統(tǒng)一的 MCP/HTTP 通信層以及一個(gè)可以換模型的 AI 規(guī)劃層。日常開發(fā)里最實(shí)用的組合是“Web GUI 做快速原型 Cursor MCP 做 C 協(xié)同”。比如新項(xiàng)目啟動(dòng)先在 Web GUI 里用自然語言把藍(lán)圖框架、Input Action、GameMode 配好然后跑export_for_cursor導(dǎo)出上下文在 Cursor 里cursor_blueprint_context.md讓 AI 生成對應(yīng)的 C 類你只需要補(bǔ)交互邏輯。這樣 AI 搭的是結(jié)構(gòu)你寫的是玩法分工明確。如果你想讓規(guī)劃層更穩(wěn)建議把模型入口統(tǒng)一到 TaoToken 模型對話這樣 Cursor、Web GUI、CLI 三端可以共用同一套模型配置換模型不用改代碼。長期做編碼和 Agent 任務(wù)的話可以看看 Coding Plan把工具調(diào)用和長上下文規(guī)劃的成本壓下來。接入文檔和 Tool Schema 細(xì)節(jié)在 TaoToken 文檔 里有更完整的說明。如果你用 Claude Code 做 Agent 編排可以參考 ClaudeCodeAnthropic 接入方式把 AIUEBridge 的 MCP Server 掛進(jìn)去讓 Agent 直接調(diào)用 UE 工具。最后提醒一句AIUEBridge 的定位是編輯器自動(dòng)化執(zhí)行層它不替代你寫 C也不替代編輯器本身。它的價(jià)值在于把重復(fù)的、結(jié)構(gòu)化的編輯器操作變成 AI 可調(diào)用的 Tool讓你把時(shí)間花在真正需要判斷力的地方。端口配置和.env一致性是踩坑最多的地方先把這兩個(gè)搞定后面就順了。