拓冰建站拓冰建站
首页 / 资讯中心 / 正文

MCP 桥接 Trae AI 与 UE:Vibe Coding 驱动关卡搭建

在日常 Unreal Engine 项目里搭一个测试关卡最耗时间的往往不是“想清楚要什么”而是“把想法一点点搬进编辑器”。手动拖 Actor、反复调坐标、右键改材质、等编译结果……如果你经常做的是“先摆场景、跑起来看、再回头改参数”这种循环一天下来真正花在判断上的时间可能不到一半。Vibe Coding 这两年很火但很多人对它的理解还停留在“用 AI 生成代码片段再手动粘回去”。真正的 Vibe Coding 不是代码补全而是让 AI 理解你的意图后自己去读上下文、调命令、操作编辑器、验证结果。要做到这一步关键不在模型本身而在于 AI 和编辑器之间那条“可以执行操作的通道”。这条通道就是 MCP。这篇文章要讲的是我日常跑通的一条工作流Trae AI 作为 AI Agent 的宿主UE 5.8 作为引擎侧的执行环境中间通过 MCP 协议把两者桥接起来。读完你可以照着配置自己的开发环境让 AI 直接帮你完成“列出场景中所有 Actor”“把某个物体移动到指定位置”“批量整理关卡”这类原本要在编辑器里手动完成的操作。文章会按“概念 → 环境 → 配置 → 代码 → 验证 → 排错 → 最佳实践”的顺序展开适合独立游戏开发者、技术美术和 UE 工具链相关开发阅读。1. 为什么要把 Vibe Coding 接进 Unreal Engine先看传统 UE 编辑器的日常操作有多“碎”。假设你要把场景里的 10 个方块沿 X 轴均匀排开要做的操作是逐个选中 Actor在 Detail 面板里输入坐标或者拖拽移动然后还要保证朝向、高度一致。如果是美术资源来回调整的阶段这种事情一天要做几十次。如果用传统 AI 编程方式能做的是让 AI 生成一段 Python 编辑器脚本然后你手动复制到编辑器里运行。这比手动操作快但体验依然割裂你需要在 IDE 和 UE 编辑器之间来回切脚本生成后要自己确认是否匹配当前引擎版本跑挂了还要自己看堆栈。MCP 改变的是这一层。MCP 全称 Model Context Protocol是一套开放的工具调用协议。它让 AI 不再只是“生成文本”而是可以像调用本地函数一样去调用外部工具、读取外部数据、执行外部操作。放在 UE 场景里就是让 AI 能“看到”关卡里有哪些 Actor、“拿到”物体坐标、“修改”物体位置。从架构上看这套工作流最大的价值在于把“意图到编辑器操作”这条链路标准化了。以前每个团队都要自己写脚本、自己对接模型、自己做交互面板现在 IDE、模型、MCP Server、引擎侧执行器各司其职你只需要把“AI 能调用哪些工具”这件事配置清楚。我给的判断是这套工作流适合两类人。一类是独立开发者一个人要同时兼顾关卡、蓝图、美术资源能省一次手动操作都是赚另一类是技术美术和工具链开发他们愿意花一晚上把桥接服务写好然后每天省下大量重复调整时间。对于只偶尔打开 UE 的同学价值相对有限——因为搭建和调试这套链路本身也需要一定成本。很多人会问“UE 5.8 和 MCP 有什么关系”。UE 5.8 是 2025 年的 Unreal Engine 新版本它的编辑器脚本、Python 自动化、Remote Control 这些基础设施在近几代引擎里保持了稳定。也就是说本文的接入思路不只适用于 5.8UE 5.1 到 5.8 基本通用只是插件菜单名称和部分 API 会有微调。真正的关键并不在 UE 版本而在“编辑器能不能暴露操作接口”这件事上。2. 核心概念Vibe Coding、MCP、Trae AI 和 UE 5.82.1 Vibe Coding 到底是什么Vibe Coding 这个说法来自 Andrej Karpathy 在 2025 年初的总结指的是一种“和 AI 一起写代码”的开发方式你用自然语言描述想要的效果AI 负责生成代码、修改文件、跑通流程你更像一个评审者而不是逐行手写的执行者。这个词很容易被误解成“写代码不需要懂技术”。实际做下来会发现Vibe Coding 对“判断力”的要求反而更高你得能读懂 AI 生成的代码是不是对的得能描述清楚边界条件得会验证结果。在 UE 编辑器场景里尤其如此——AI 可以帮你把 10 个 Actor 摆整齐但如果它把不该移动的灯光也挪了位置出问题后你未必能马上发现。2.2 MCP 协议解决的核心问题MCP 是 Anthropic 在 2024 年底提出的开放协议全称 Model Context Protocol。它解决的核心问题是AI 模型如何标准化地调用外部工具和数据。没有 MCP 的时候每个 AI 应用想接入一个新工具都要自己写一套对接逻辑。今天接一个 UE 编辑器要写 Python 脚本明天接一个浏览器自动化又要写一套 Node 接口后天接数据库还得再搞一套 SQL 封装。MCP 把这件事标准化了工具提供方只要实现一个 MCP ServerAI 宿主比如 Trae AI就可以通过统一的协议发现工具、调用工具、传递参数、拿回结果。MCP 的架构有三个角色角色说明在本文场景中的对应Host承载 AI 模型的宿主应用Trae AIClientHost 内部的协议客户端负责和 Server 通信Trae AI 内置的 MCP 客户端Server暴露工具、资源、提示词的独立服务我们自己写的 ue-bridge 服务传输方式上MCP 支持 stdio标准输入输出和 HTTP/SSE 两种。开发阶段常用 stdio直接python xxx.py启动一个进程如果服务要部署在远程机器再用 HTTP/SSE。本文的示例以 stdio 为主这也是 Trae AI 这类桌面 IDE 最顺手的接入方式。2.3 MCP 与 Agent Skill 的区别最近很多人问 Agent Skill 和 MCP 有什么区别。简单说这是两层东西。MCP 解决的是“AI 能调用什么外部能力”的标准化问题定义的是工具接入协议。Agent Skill 则是“AI 如何完成一类任务”的封装它可以是指令模板、示例流程、工具组合方式、约束条件打包在一起的能力包。举例理解MCP 是“给你一把螺丝刀”Skill 是“教你怎么把一架柜子装好”。MCP 保证 AI 调螺丝刀的姿势标准Skill 保证 AI 知道先装哪块板、什么顺序上螺丝。在 UE 工作流里MCP 负责把“移动 Actor”“列 Actor”暴露给 AISkill 则可以把“整理测试关卡”这件事的方法论固化下来两者并不冲突反而是搭配使用的关系。2.4 Trae AI 在其中的角色Trae AI 是字节跳动推出的 AI IDE底层基于 VS Code 的交互模型内置了对话式 Agent 能力。开发者可以在 IDE 里直接和 AI 对话让它读工程文件、改代码、跑命令这就是典型的 Vibe Coding 体验。和 Vercel 那种 Web 侧 Vibe Coding 平台相比Trae AI 直接落在本地 IDE 里配合 UE 这种桌面编辑器反而更顺手因为引擎进程本身就在本机。Trae AI 支持 MCP 接入这个能力非常关键。它让 Trae 的 Agent 不再局限于“读代码、写代码”而是可以通过 MCP Server 驱动外部程序。再加上它对主流模型的支持你可以根据自己的需要选择模型——需要强工具调用能力的场景选支持 function calling 的模型会明显更稳。3. 环境准备与前置条件开始之前先把环境准备好。这个方案的前提是UE 和 Trae AI 都安装在同一台本机因为我们要通过本地端口通信。组件说明操作系统Windows 优先macOS 同理端口和路径注意调整Trae AI从官网下载安装首次使用需要注册并登录账号。如果遇到 passport 相关的登录异常先确认账号状态、本地缓存和 IDE 版本必要时重启 IDE 再试UE 5.8任意含编辑器的安装版本都可以UE 5.1 也兼容本文思路Python本机用于运行 MCP Server建议 Python 3.10需要能安装第三方库fastmcp 库MCP Server 的 Python 框架命令行执行pip install fastmcp requestsUE 编辑器侧需要启用两个插件Python Editor Script Plugin这是 UE 提供编辑器 Python 自动化的基础插件启用后才能执行 Python 脚本、调用编辑器 API。Remote Control可选如果不想自己写 Socket 服务也可以用 UE 自带 Remote Control API 通过 HTTP 暴露属性官方插件文档有说明。本文示例采用更可控的 Python Socket 方案Remote Control 作为备选方案了解即可。在 UE 编辑器里打开 Edit - Plugins搜索插件名称勾选启用后重启编辑器即可。注意 Python Editor Script Plugin 启用后编辑器菜单会出现 Window - Developer Tools - Python Console这是后续验证的重要入口。另外建议准备一个独立的测试工程。不要直接在正在进行的主项目上试因为下面的操作会真的改变关卡内容。我在示例里用的是ue-mcp-demo这个纯测试工程。4. 工作流总览从一句话到编辑器操作先建立整体认知再进入配置。这条工作流的核心循环是你在 Trae AI 的对话框里用自然语言提出需求例如“把场景里所有 Cube 开头的 Actor 按 X 轴均匀排开”。Trae AI 的 Agent 解析需求决定调用哪个 MCP 工具。工具调用通过 MCP 协议发送到本地 MCP Serverue-bridge 进程。ue-bridge 把命令转换成 JSON通过 TCP 发送给 UE 编辑器内运行的 Socket 服务。UE 编辑器的 Python 脚本执行实际操作比如读取 Actor 列表、修改坐标。结果按原路径返回AI 拿到结果后继续决策直到完成整个任务。这个循环的关键点是AI 的每一步操作都能拿到真实反馈。它调用list_actors后能看到关卡里真实的 Actor 标签而不是猜的它调用set_actor_location后能看到操作是否成功。有了这种“感知-行动-验证”的闭环Vibe Coding 才真正从“聊天生成代码”升级成了“AI 操作编辑器”。如果不想自己写代码社区也已经有不少现成 UE MCP 插件思路类似在 UE 编辑器内部启动一个服务通过 MCP 暴露给 AI IDE。不过自己写一遍好处更多既能理解协议细节又能按自己项目定制工具后面维护起来心里有底。5. 在 Trae AI 中配置 UE MCP 服务5.1 准备项目级配置文件Trae AI 支持项目级 MCP 配置文件一般叫.mcp.json放在项目根目录。这样配置可以随工程一起提交到版本库团队其他人拉下来就能用。内容如下{ mcpServers: { ue-bridge: { command: python, args: [ D:/projects/ue-mcp-demo/tools/mcp_ue_bridge.py ], env: { UE_SOCKET_HOST: 127.0.0.1, UE_SOCKET_PORT: 9101 } } } }关键字段说明command启动 MCP Server 的可执行程序。在 Windows 上如果python没有加入 PATH这里要填完整路径例如C:/Python311/python.exe。argsMCP Server 脚本的完整路径。env传给 Server 进程的环境变量。这里用UE_SOCKET_HOST和UE_SOCKET_PORT指定 UE 编辑器的 Socket 服务地址端口要和后面 UE 侧脚本保持一致。5.2 在 Trae AI 中添加 MCP Server在 Trae AI 的设置界面中找到 MCP 管理入口不同版本菜单位置可能不一样一般在设置或侧边栏的 MCP 面板里。添加方式有两种手动添加在 UI 表单里填入 Server 名称、类型stdio、命令和参数Trae AI 会自动生成配置文件。直接识别项目文件把.mcp.json放到项目根目录Trae AI 打开项目后通常会自动识别并加载。添加成功后MCP 面板里会显示ue-bridge这个 Server 的状态。如果显示为 connected说明连接成功如果显示 failed 或 error优先检查命令路径是否正确、依赖库是否安装。这里有个容易踩坑的地方MCP Server 进程一定要保持干净的标准输出。如果脚本里写了print()打印业务日志会污染 stdio 协议导致 Trae AI 解析失败表现就是“MCP 工具注册不上”。这个坑在社区里很常见之前有不少人用 Figma MCP 在 Codex 中遇到“工具注册不上”原因往往就是这个。后面写代码时会专门处理。6. 自己写一个 UE MCP 桥接服务6.1 为什么需要桥接服务Trae AI 里的 Agent 不直接认识 UE 编辑器。它认识的只有 MCP Server 暴露出来的工具。所以我们要写一个进程一方面以 MCP Server 的身份和 Trae AI 通信另一方面把工具命令转发给 UE 编辑器。由于 UE 编辑器内的 Python 环境和跑 MCP Server 的 Python 环境不是同一个最简单的桥接方式是UE 编辑器内跑一个 TCP Socket 服务接收 JSON 命令MCP Server 每次收到工具调用就通过 TCP 把命令发过去拿到结果再返回给 Trae AI。这个结构的好处是职责清晰MCP Server 只负责协议翻译UE 编辑器内只负责执行引擎 API。任何一边出问题都能单独排查。6.2 UE 编辑器侧Socket 服务在测试工程的Content/Python目录下创建一个脚本文件命名ue_mcp_socket_server.py。UE 的 Python 环境会把这个目录加入模块搜索路径方便后续导入和运行。# 文件路径Content/Python/ue_mcp_socket_server.py # 在 UE 编辑器中运行监听本地 TCP接收 JSON 命令并操作编辑器 import json import socket import threading import unreal def get_level_actors(): 获取当前关卡所有 Actor优先使用 EditorActorSubsystem。 subsystem unreal.get_editor_subsystem(unreal.EditorActorSubsystem) return subsystem.get_all_level_actors() def handle_command(cmd): cmd_type cmd.get(type) if cmd_type list_actors: actors get_level_actors() return {ok: True, actors: [a.get_actor_label() for a in actors]} if cmd_type get_actor_location: target None for actor in get_level_actors(): if actor.get_actor_label() cmd.get(actor): target actor break if target is None: return {ok: False, error: actor not found} loc target.get_actor_location() return {ok: True,
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门