教程Stefan VaskevichStefan Vaskevich

本地 LLM + 虚幻引擎 5.8 MCP:免费 AI 从零构建一款完整游戏

不用云端、不用 API key,每个任务 $0.00:llama.cpp 本地运行 Qwen3.6-27B,通过 Cline 接入 UE 5.8 原生 MCP,用 17 个提示词构建一款可玩的游戏。

上次,Claude 通过全新的原生 MCP 在虚幻引擎 5.8 里搭出了一个世界—— 而那期视频下方点赞最高的评论,毫无悬念是: “好吧,但你能用一个本地、免费、开源的 AI 做到这些吗?” 问得好。Claude 确实出色——直到你看到账单为止。

所以这一次:没有云端、没有 API key、没有订阅。 Qwen3.6-27B——270 亿参数,大约 17 GB 的权重躺在一块消费级 GPU 上——通过同一个原生 MCP 直连正在运行的虚幻编辑器。17 条提示词,而且每一条都是全新对话:模型在 步骤之间什么都不记得。思考模式关闭。而 Cline 历史里的每个任务,角落里都挂着同一个 数字:$0.00

一句话说清这套搭建
Qwen3.6-27B(开放权重,由 llama.cpp 在本地提供服务)+ VS Code 里作为智能体框架的 Cline + 虚幻引擎 5.8 的原生 MCP 服务器驱动正在运行的编辑器。整个游戏的 API 总花费:$0.00。(GPU 另购。)
虚幻引擎 5.8 中的 BurgerTower 游戏画面:食物塔以 PERFECT! x26 连击攀升到 8,902 米,背景顶端一张巨大的嘴巴正等着它——全部由本地 LLM 搭建
最终成果:x26 完美连击、8,902 米高空,正朝背景顶端巨人张开的嘴攀升。这一帧背后的每一张蓝图、每个控件和每个特效,都出自一个 17 GB 的本地模型之手。

真正的问题从来不是“它能不能打开编辑器”,而是一个本地模型能否扛住一个真实项目:编写蓝图、搭一个 28 控件的 HUD、接好输入系统,还要钻进 引擎肚子里追踪自己的 bug——还是在第一次工具调用时就崩掉。据我们所知,在这之前还 没有人发布过通过 UE 原生 MCP 成功完成的本地 LLM 构建;我们找到的唯一一次公开尝试, 在发布当天以失败告终。下面是完整的搭建方法、它做出了什么,以及一个诚实的结论。

1. 模型:Qwen3.6-27B,以及它真正需要的硬件

选择的是 Qwen3.6-27B——一个稠密的开放权重模型,目前在开源模型的 智能体编码基准中名列前茅,这一代还内置了工具调用方面的改进。这里使用的具体版本来自 unsloth GGUF 仓库,用的是 UD-Q4_K_XL 量化 (UD = Unsloth Dynamic)——权重大约 17 GB。

对比 Qwen3.6-27B 与其他开源模型及 Claude 在 SWE-bench、Terminal-Bench 和智能体编码测试中表现的基准图表
为什么选这个模型:Qwen3.6-27B 在智能体编码基准上领跑稠密开源阵营——这正是驱动编辑器的智能体所需要的那项技能。
硬件现实检查
17 GB 的量化权重加上 40k token 的 KV 缓存需要一块 24 GB GPU——RTX 3090、4090 或 5090 都够用——或者一台32 GB 以上统一内存的 Apple Silicon Mac。显存不够?调低上下文大小, 或从同一个仓库挑一个更小的量化版本;下面的搭建流程完全不变。把话说准确一点:$0.00 指的是 API 账单——模型是开放权重,工具链是开源的,虚幻也可以免费安装 (发行游戏时适用 Epic 的标准分成条款)。

2. 用 llama.cpp 在本地启动它(这些参数就是全部胜负手)

一条命令装好 llama.cpp——在 Windows 上就是 winget install llama.cpp——然后 启动服务器。-hf 参数会在第一次运行时 直接从 Hugging Face 拉取指定的量化版本,所以不需要单独的下载步骤:

winget install llama.cpp   # macOS/Linux: curl -LsSf https://llama.app/install.sh | sh

llama serve -hf unsloth/Qwen3.6-27B-GGUF:UD-Q4_K_XL -a Qwen3.6-27B \
  --host 127.0.0.1 --port 1235 \
  -ngl 99 -fa on -c 40960 \
  --cache-type-k q8_0 --cache-type-v q8_0 \
  --jinja --reasoning off \
  --temp 0.7 --top-p 0.80 --top-k 20 --min-p 0.0 \
  --presence-penalty 1.5 --repeat-penalty 1.0

每一组参数都在做什么——因为它们每一个都有存在的理由:

性能参数
-ngl 99 把所有层都放到 GPU 上(99 的意思就是“全部”)。-fa on 启用 flash attention。-c 40960 是 Qwen3 的原生上下文上限——显存吃紧就调低它。q8_0 的 K/V 缓存参数把注意力缓存压缩到 8 位:内存几乎减半,质量几乎不动。
智能体参数
-a Qwen3.6-27B 给 API 里的模型命名——稍后你要在 Cline 里输入的正是这个字符串。--reasoning off 关闭思考模式:智能体循环需要的是每回合一次快速工具调用,而不是一段独白——延迟更低,也不浪费 token。
Qwen 官方的无思考采样预设
Temp 0.7(Qwen 明确警告不要设为零——贪心解码会把模型逼进重复循环)、top-p 0.80、top-k 20、min-p 0.0(有些前端默认非零,会破坏输出)、presence-penalty 1.5,全部照搬模型卡——还有 --repeat-penalty 1.0,意思是关闭。llama.cpp 默认给它设成 1.1,而那种老式惩罚会实实在在地伤害 Qwen。
成败全系于一个参数:--jinja
--jinja 强制 llama.cpp 使用模型的原生对话模板。没有它,服务器就无法解析 Qwen 用来格式化工具调用的 标签——Cline 将永远看不到任何一次工具调用。模型看起来一切正常,聊得很开心,却对 你的编辑器什么也不做。如果你的本地智能体“只说不做”,第一个要检查的就是 这个参数。
Windows PowerShell 运行带完整参数的 llama serve:Qwen3.6-27B 从 Hugging Face 下载、加载,并在 127.0.0.1:1235 上监听
PowerShell 里的一条命令:llama.cpp 从 Hugging Face 拉取 17 GB 的量化权重,加载到 GPU 上,开始在 127.0.0.1:1235 监听。

3. 把 Cline 指向你自己的服务器

Cline 就是这里的智能体框架——一个免费开源的 VS Code 扩展。llama-server 暴露的是 OpenAI 兼容端点,所以 Cline 与你的 GPU 对话时,就像在调用一个云端 API:

1

API Configuration

Provider 选 OpenAI Compatible;Base URL 填 http://127.0.0.1:1235/v1(其中的 /v1 路径必不可少);Model 填 Qwen3.6-27B——必须与 -a 参数完全一致;API Key—— 随便填一个非空字符串(服务器从不校验它,但 Cline 要求这一栏不为空)。Context Window 填 40960,与服务器保持同步。Reasoning Effort 选 None,对应 --reasoning off

2

对虚幻智能体真正重要的功能开关

Native Tool Call 开——使用模型真正的工具调用格式,而不是提示词 补丁。Parallel Tool Calling 关——反正你也无法并行操作虚幻编辑器; 它一次只能做一个操作。Auto Compact 关——这里一个对话就是一个 任务,永远不会有需要压缩的长历史。

3

Yolo Mode 开(可选,但这正是重点)

Yolo Mode 会自动批准每一次工具调用——相当于本地版的 bypass-permissions。用云端 智能体时,每一次“继续吗?”都在消耗你的注意力钱;这里模型是 你自己的,放手让它跑。

VS Code 中的 Cline API Configuration:OpenAI Compatible 提供方、Base URL http://127.0.0.1:1235/v1、Model Qwen3.6-27B、Context Window 40960
整个云端替代方案就是一页设置:OpenAI Compatible 提供方、你的 localhost 地址,以及与 -a 参数一致的模型名。

4. 把它接进虚幻引擎 5.8

虚幻这一侧还是我们在 上一章 讲过的那个原生 MCP 服务器——启用插件、打开 Auto Start Server,编辑器就会在 http://127.0.0.1:8000/mcp 上监听。 (MCP 插件目前仍标记为 Experimental,而且有时确实看得出来——下文细说。)唯一的 新东西是在 cline_mcp_settings.json 里把它告诉 Cline:

{
  "mcpServers": {
    "unreal-mcp": {
      "type": "streamableHttp",
      "url": "http://127.0.0.1:8000/mcp"
    }
  }
}

第一个任务,在全新对话里:“check mcp connection to unreal engine.” 第一条 execute_python_code 调用就失败了, 抛出一个 AttributeError——一次写错的 Python API 调用。而这恰恰是第一个真正令人 振奋的时刻:模型读了 traceback,自己得出结论——连接没问题,错的只是它的 代码——然后用修正后的代码重试。8 毫秒之后:“MCP connection to Unreal Engine: SUCCESSFUL.”

VS Code 中的 Cline 与虚幻引擎 5.8 里空空的 BurgerStudio 关卡并排,显示 MCP 连接检查任务,每个任务都标着 $0.00 的费用
链路确认:Qwen(localhost:1235)——Cline——MCP(localhost:8000)——正在运行的虚幻编辑器。注意任务列表里的固定笑点:每个任务都以 $0.00 收尾。
下载项目规则文件(真正的省时神器)

一个任务之间毫无记忆的本地模型,生死全系于它的规则文件。这一份—— BurgerTower_SystemPrompt.md—— 装着项目约定、编辑器 API 笔记、编译纪律,以及那些否则每个都要吃掉一条提示词的引擎 陷阱(float 必须声明为 real 类型, 否则会悄悄变成 int;每次工具调用只做一个系统;编译两遍以清除默认值警告)。放进你 的项目里,按需修改。

5. 压力测试:17 条提示词做出一个完整游戏

项目叫 BurgerTower——一个单键街机叠塔游戏。一块食物在不断长高的 塔上方来回摆动;点一下就落下。落得干净可以得分加成,外加一泼肉汁;塔身歪斜就会 倒塌,一局结束。每叠一层,镜头就爬得更高——城市、云层、平流层、太空。项目里只带了美术资源:八个食物网格、一张全景贴图、一张空荡荡的摄影棚地图。每一张蓝图、 每个图表、控件、输入资产、材质和特效,都要由模型通过 Python 在编辑器里现场编写。

资产来自 Tripo(美术不归 AI 智能体管)
八个食材网格——芝麻面包、牛肉饼、番茄、生菜、甜甜圈、蓝莓华夫饼、松饼塔、意式辣 香肠披萨——都是在 Tripo 里根据图片、用 HD 模式、按每件的面数预算生成的。Tripo 目前位居 top3d.ai 排行榜 榜首——而这种分工正是行之有效的模式:生成工具负责美术,智能体围绕它搭系统。
Tripo 资产管理器中生成的食物网格:生菜、番茄片、甜甜圈、面包、披萨、松饼塔和蓝莓华夫饼
这个游戏的全部美术预算:出自 Tripo 的八个食物网格。BurgerTower 里的其他一切都由本地模型用代码编写。

还有一条让这次测试成为真正基准而非演示的规矩: 每条提示词都是一个全新的 Cline 任务,上下文干干净净。模型在步骤 之间什么都不记得——连续性全靠提示词本身来传递,就像把活儿委托给一个每天早上醒来都 失忆的承包商。总共 17 份委托。

提示词 1-6:整副骨架,一次 Play 都没按

前六条提示词把每个部分分开构建,只靠编译来验证:带物理配置和网格池的下落 方块 Actor(网格必须就是根组件——物理只模拟根,挂在空根下面的网格会在物理唤醒的 一瞬间被撕下来);它的事件图,其中一个三重过滤的 Hit 事件把一次物理接触变成恰好 一个“我落地了”的信号;一个从引擎模板复制出来的 Niagara 爆发特效;带 19 个状态变量的摄像机 Pawn;还有 HUD。

贴进 Cline 的第一条提示词:创建 BP_Ingredient,以 StaticMeshComponent 为根、PhysicsActor 配置、bLanded 和 MeshPool 变量——旁边是空的虚幻项目
17 条提示词中的第 1 条,在全新对话里:下落方块 Actor,规格细到解释了为什么网格必须是根。自动批准:YOLO。

HUD 值得单独说一句:28 个控件——记分卡、金色的 BEST 徽章、 PERFECT!/COMBO 提示、带 CITY/CLOUDS/STRATOSPHERE/SPACE 刻度的海拔仪,以及带 RETRY 按钮的完整死亡界面——排版、锚定、上色、样式全部用代码完成,只用了两次 工具调用,UMG 设计器里一下都没点。第二次调用是本地模型连续流式输出了大约两分半钟的 一整段代码。一次编译通过。

提示词 7-13:接线成型、第一次 Play、第一次游戏结束

第二幕按依赖顺序把各部分连起来:先是 Pawn 上的落地接收器,然后是 Tick 心跳(摆动 正弦、平滑的镜头爬升、逐帧 HUD 更新、由物理驱动的失败判定)、Enhanced Input 资产、 BeginPlay 引导,以及游戏模式——包括一个隐蔽陷阱:设置默认 Pawn 之后必须重新编译游戏模式,否则 Play 会一直生成引擎自带的 Pawn。模型重新编译并回读 数值做了验证。整个系列的第一次 Play 直到第 11 条提示词之后才出现:Pawn 生成,HUD 从零起步,一块面包在塔基上方摆动。

第一次 Play-In-Editor 冒烟测试:SCORE 0、HEIGHT 0 m、带 SPACE/STRATOSPHERE/CLOUDS 刻度的海拔仪,以及在塔基上方摆动的面包
第一次按下 Play——在纯搭建了 11 条提示词之后。HUD 归零、海拔仪就位、一块面包沿着它的正弦曲线摆动。

第 12 条提示词是投放按钮——在按下的一瞬间判定完美、唤醒方块的物理、棘轮式抬升 镜头、生成下一块——也是整个系列最大的代码块:大约三分钟的流式输出,然后引擎又花了 三分半编译这张图。任务进行到一半,MCP 端点掉线了;Cline 自己把同一条调用 原样重发,构建继续进行。这类传输失败在整个项目里发生了三次,智能体每一次 都当着镜头自愈了。然后:Play、第一次投放、一串“PERFECT! x4”连击、塔身 倾斜、在 5,316 米处倒塌、GAME OVER、RETRY——整个游戏循环跑通了。第 13 条 提示词是经典的手感打磨:加大摆幅、加快速度、把 FOV 从 70 开到 80。

在蓝图编辑器中打开的 BP_BurgerPawn:带 BeginPlay、Tick 和 OnPieceLanded 事件的 EventGraph,外加 19 个带类型的变量,全部通过 Python 编写
模型真正写下的东西:BP_BurgerPawn 的事件图和它 19 个变量的状态块,事后打开检查。全部通过 BlueprintService 调用完成,而非点击。

提示词 14-15:按公式写出的着色器,然后是发布前收尾

第 14 条提示词是炫技环节:用代码构建背景材质——通过 MaterialEditingLibrary 连出约 18 个材质节点——把一张竖长的全景贴图映射到屏幕空间,可见窗口随镜头爬升同步 上移。纯粹的着色器数学,在提示词里以公式口述,由模型转写成节点连线。这个任务也产生 了整个系列唯一真正的波折:一条响应在传输中丢失,重试与第一次调用已经创建的资产 撞车,虚幻弹出了覆盖确认对话框。模型没有陷入循环——它判断材质已经存在,径直进入 第二部分。第 15 条提示词是发布前收尾:接上从第 7 条起就故意留空的那根 exec 连线 (停在门后的完美命中爆发特效)、把特效重新调成肉汁棕,并做一次点名——八个资产, 全部编译通过。

发布收尾的验证运行:塔在云层全景前到达 469 米,Cline 的任务总结报告所有资产编译通过
发布收尾:停放的爆发特效接上了线,八个资产全部报告 BS_UP_TO_DATE,全景背景随爬升平移——按公式连出约 18 个材质节点。

提示词 16:真正的 bug——以及回答标题之问的时刻

发布收尾之后,完美命中的飞溅在游戏里仍然是白色——尽管工具报告 一路绿灯,颜色值也确确实实写进了资产。第 16 条提示词把这个谜题交给模型:查明颜色 为什么始终没到屏幕上。它给出的诊断是整个项目最聪明的瞬间:Niagara 在后台编译 系统,而游戏一直在播放这个特效的旧编译副本。它的修复方案:在全部三个发射器上 重设颜色、保存,然后在编辑器里打开该系统以强制重建。下一次 Play:两次完美命中, 深棕色的飞溅带着火花。这不是照着教程做模式匹配——这是在推理引擎的资产管线。

第 17 条提示词是饭后甜点:导入一张新全景——汉堡城市上方一个大口咬合的巨头——并把 材质的采样器重新指向它。一次导入、一次重指向;平移数学放在完全不碰贴图的标量参数 里,所以背景在会话中途就在视口里实时换掉了。

Cline 里的美术替换任务:新的咬合巨头全景贴图应用到背景材质上,在塔基后方的虚幻视口中实时可见
第 17 条提示词:一次导入加一次采样器重指向,新天空就在视口里亮了——材质重编译是同步的。侧边栏里的每个任务:$0.00。

6. 诚实的结论

它在哪里出彩,又在哪里挣扎
  • 它扛住了一个真实项目。17 条全新上下文的提示词,每个系统都编译 通过,还诊断并修复了一个真正的引擎级 bug。游戏的骨架在一次 Play 都没按的情况下 搭完。
  • 它比云端前沿模型慢。大代码块在单块消费级 GPU 上要流式输出两到 三分钟,最重的那张图还要引擎再编译约 3.4 分钟。请预留一个从容的晚上,而不是 午休时间。
  • 框架在干实活。Cline 三次重发了掉线的 MCP 调用;模型从自己写错 的 API 调用和一次资产冲突重试中都恢复了过来。要预期 Experimental 级别的 MCP 端点会打嗝——也要预期这套循环能把它消化掉。
  • 提示词承载着你没花钱买的那份智力。 精确、一次一个系统的任务书加上规则文件,才是让一个无记忆本地模型表现得像资深 工程师的原因。含糊的提示词撑不过第一回合。
  • 它能取代 Claude 吗?对这样的结构化构建——说真的,$0.00 的 API 成本,它把活儿干完了。对混乱、开放式的工作,前沿模型仍能给你 27B 本地模型没有 的容错余量。按项目选择,别按立场选择。
BurgerTower 最终游戏画面:6,910 米处 PERFECT! x22 连击,得分 133,食物塔在卡通天空中攀升
最终演示:约 7 千米处 x22 完美连击,还在继续爬。最好的一局冲到 17,736 米——越过了 15,000 米的 SPACE 刻度。17 条提示词,约 17 GB 的模型,17.7 千米的汉堡。

是的,数字命理学也对上了:17 条提示词、一个 约 17 GB 的模型、一座 17.7 千米高的最终高塔—— 越过太空边缘,落进巨人张开的嘴里,还配着一个像模像样的游戏结束界面。每一步的账单 都是 $0.00。

你到手的究竟是什么

一套每任务 $0.00 的智能体栈
llama.cpp 在你的 GPU 上跑 Qwen3.6-27B,Cline 当框架,UE 5.8 的原生 MCP 当双手——整条链路里没有一个 API key。
一套真正能用的参数组合
--jinja 保证工具调用,--reasoning off 服务智能体循环,Qwen 官方采样预设,还排掉了 repeat-penalty 这个坑。
一个完整可玩的游戏
物理堆叠、完美命中连击、28 控件的 HUD、程序化背景、特效、输入和游戏结束界面——用 17 条全新上下文的提示词完成。
它能调试引擎的证据
那次陈旧 Niagara 编译的诊断,正是本地模型不再像玩具的时刻——它推理了资产管线并强制重建。

这就是整条流程:一条 llama.cpp 命令、一页 Cline 设置、一条 MCP 配置——一个本地 模型就驱动着与云端智能体相同的编辑器。喂养这类项目的生成工具在不断更替;新工具一 落地,就会直接进入 竞技场,让你在投入前先做盲测对比。想看这个故事的前几章,请见 虚幻引擎 5.8 原生 MCP + Claude 以及 Claude Code + 虚幻引擎 5

观看完整构建过程

完整的搭建过程和全部 17 条提示词,从头到尾,全程在 YouTube 上。

想亲自比较这些工具?来试试我们的3D AI竞技场。

本地 LLM + 虚幻引擎 5.8 MCP:免费 AI 从零构建一款完整游戏 | Top 3D AI