README_CN.md
September 17, 2026 · View on GitHub
Funplay MCP for Unity
The Most Advanced MCP Server for Unity Editor
中文 | English
💖 如果这个项目对你有帮助,欢迎顺手点一个 Star。它能帮助更多 Unity 开发者发现这个项目,也能支持后续持续维护。
Funplay MCP for Unity 是一个采用 MIT 协议的 Unity 编辑器 MCP 服务器,让 Claude Code、Cursor、Kimi Code、LM Studio、Windsurf、Codex、VS Code Copilot 等 AI 助手直接操作正在运行的 Unity 项目。
一句话描述你的游戏 — AI 助手通过 Funplay MCP for Unity 的内置工具自动创建场景、编写脚本、验证运行态、模拟输入、分析性能并完成编辑器自动化,把所有逻辑串联起来。
"做一个贪吃蛇游戏,10x10 网格,食物随机生成,计分 UI,游戏结束界面"
AI 助手通过 Funplay MCP for Unity 全程处理:创建场景、生成全部脚本、搭建 UI、配置游戏逻辑 — 只需一句话。
16 秒 demo — AI 生成 3D 模型并端到端集成进场景。观看高清 MP4。
快速开始
如果你只想尽快跑起来,先做这三步:
- 用 Git URL 安装 Unity 包
- 打开
Funplay > MCP Server - 使用内置的一键客户端配置
1. 通过 UPM 安装 (Git URL)
在 Unity 中,打开 Window → Package Manager → + → Add package from git URL:
https://github.com/FunplayAI/funplay-unity-mcp.git
💡 在 clone 或安装之前,如果你愿意顺手点一个 ⭐,会非常感谢。
可选方案:通过 OpenUPM 安装
如果你希望 Unity Package Manager 显示 registry 提供的完整“版本历史记录”并能选择历史版本,可以改用 OpenUPM 安装。
使用 OpenUPM CLI:
openupm add com.gamebooom.unity.mcp
或者手动在 Packages/manifest.json 中添加 scoped registry:
{
"scopedRegistries": [
{
"name": "OpenUPM",
"url": "https://package.openupm.com",
"scopes": [
"com.gamebooom"
]
}
],
"dependencies": {
"com.gamebooom.unity.mcp": "0.6.9"
}
}
如果之前是用 Git URL 安装的,先移除 Git dependency,再从 OpenUPM 安装。Git 来源的包在 Unity 中只会显示当前解析到的 Git 版本,不会显示 registry 提供的完整 Version History。
2. 启动 MCP Server
菜单:Funplay → MCP Server 启动服务。
新工程使用按工程路径派生的独立端口,因此同时打开两个工程的编辑器不会互相抢端口。MCP Server 窗口会显示实际地址(http://127.0.0.1:<端口>/),一键配置会把该地址写进客户端配置。需要固定端口(CI / 防火墙规则)时在 Server Port 里填一个即可 pin 住,点 Use Per-Project Port 改为按工程派生。
从旧版本升级不会有任何变化:工程会保留原来在用的端口(记为 pin),已配置的客户端照旧可用。等到需要让该工程与另一个编辑器同时服务时,再点一次 Use Per-Project Port 即可。完整配置指南见 同时开多个 Unity 工程。
如果窗口显示当前使用回退端口,不要继续使用仍指向被占稳定端口的客户端条目;它可能连到占着该端口的另一个进程。一键配置会保持阻止,直到你点 Use Per-Project Port 或 Pin Current Port,并等服务器完成重启。
默认传输仍然是进程内 Direct HTTP。如果你需要在 Unity 脚本重编译或进入 Play Mode 触发域重载时尽量保持 MCP 客户端连接,可以在 MCP Server 窗口启用 Experimental Broker Mode。它会用 Unity 自带 Mono 启动一个很小的本地 broker,客户端仍然连接同一个 127.0.0.1 端口,不需要改 MCP 配置。
如果你想编辑 core 或 full 各自暴露哪些工具,可以打开 Funplay → Tool Exposure。
如果需要调整 execute_code 安全默认值或插件 debug 日志,可以打开 Funplay → MCP Settings。
3. 配置 AI 客户端
优先使用 Funplay > MCP Server 窗口里的 一键 MCP 配置。
选择目标客户端后点击 Configure,插件会直接帮你写入推荐的 MCP 配置项。
对于 Claude Code、Cursor、Codex、OpenCode 和 DeepSeek Harness,也可以点击 Configure + Skills,同时安装两个内置项目 skills。
如果你希望为当前 Unity 项目配置项目级 AI 指引,可以打开 Funplay → Project Skills,为支持的平台安装内置的 unity-mcp-workflow 和 unity-ui-composition skills,其中 UI skill 用于竖屏、横屏响应式 uGUI 工作。
如果你更想手动编辑配置文件,再参考下面这些示例(把 <project> 换成本工程的条目名、<port> 换成本工程端口——MCP Server 窗口里两者都有显示):
Claude Code / Claude Desktop
{
"mcpServers": {
"funplay-<project>": {
"type": "http",
"url": "http://127.0.0.1:<port>/"
}
}
}
Cursor
{
"mcpServers": {
"funplay-<project>": {
"url": "http://127.0.0.1:<port>/"
}
}
}
LM Studio
LM Studio 的 mcp.json 路径会随版本和平台变化。建议优先在 LM Studio 中通过 Program > Install > Edit mcp.json 打开当前生效的配置文件。Funplay 的一键 Configure 会打开 LM Studio 官方 lmstudio://add_mcp 链接,并且只在发现已有配置文件时顺手更新它,不会创建一个猜测出来的路径。
{
"mcpServers": {
"funplay-<project>": {
"url": "http://127.0.0.1:<port>/"
}
}
}
VS Code
{
"servers": {
"funplay-<project>": {
"type": "http",
"url": "http://127.0.0.1:<port>/"
}
}
}
Trae
{
"mcpServers": {
"funplay-<project>": {
"url": "http://127.0.0.1:<port>/"
}
}
}
Kiro
{
"mcpServers": {
"funplay-<project>": {
"type": "http",
"url": "http://127.0.0.1:<port>/"
}
}
}
Kimi / Kimi Code
当前 Kimi Code 会从项目级 .kimi-code/mcp.json 加载 MCP Server(参见官方 MCP 文档)。Funplay 的一键 Configure 会写入这里,避免当前 Unity Server 出现在无关项目的 Kimi 会话中。如果机器上只检测到旧版 Kimi CLI 数据目录,则改写兼容的用户级 ~/.kimi/mcp.json。配置完成后,从 Unity 项目根目录启动新的 Kimi 会话;首次使用时请检查回环地址并信任工作区。项目配置包含本机端口,通常不应提交,除非团队有意共用同一个固定端口。
{
"mcpServers": {
"funplay-<project>": {
"url": "http://127.0.0.1:<port>/"
}
}
}
Codex
[mcp_servers.funplay-<project>]
url = "http://127.0.0.1:<port>/"
OpenCode
写入仓库自身的 .opencode/opencode.json(而非全局配置),因此只有在本仓库内启动的 OpenCode 会话才会看到本编辑器的工具。
{
"mcp": {
"funplay-<project>": {
"type": "remote",
"url": "http://127.0.0.1:<port>/",
"enabled": true
}
}
}
DeepSeek Harness
以带分隔标记的托管块写入每个 DeepSeek Harness profile 的 ~/.dsh/profiles/<profile>/cordis.patch.yml:DSH 每次启动通过 --profile 组合插件,对外并不暴露某个“当前生效”的 profile。重新配置时托管块之外的内容原样保留,手工删除该块即可卸载。
# >>> funplay-mcp:funplay-<project> begin (managed by Funplay MCP -- reconfigure from Unity > Funplay > MCP Server)
# Funplay Unity MCP endpoint served by this editor; tools appear as mcp__funplay-<project>__<tool>.
- insert:
- id: mcp-funplay-<project>
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: funplay-<project>
transport: streamable-http
url: http://127.0.0.1:<port>/
# <<< funplay-mcp:funplay-<project> end
Antigravity
写入工作区级 .agents/mcp_config.json,在 mcpServers 中使用 serverUrl 指向 Funplay 的 Streamable HTTP 端点,使服务器配置仅在该工作区中生效。请使用支持工作区 MCP 配置的当前 Antigravity 版本,配置后重新加载 MCP 服务器。
工作区根目录取最近的包含 .git 的祖先目录(包括 worktree 的 .git 文件);项目不在 Git 仓库中时使用 Unity 工程目录。请在 Antigravity 中打开该目录。Configure + Skills 会将 .agents/mcp_config.json、.agents/skills/ 和 AGENTS.md 托管块放在同一根目录下,也适用于 Unity 工程嵌套在仓库中的情况。其他客户端沿用现有指引位置,路径相同时共用托管块。
如果 ~/.gemini/config/mcp_config.json 或旧版 ~/.gemini/antigravity/mcp_config.json 中已有 Funplay 条目,面板会显示提示并保留原文件。完成各工作区配置后再检查这些全局条目;一键配置不会自动回退到全局配置。同一仓库中的多个 Unity 工程共用工作区,其 MCP 条目各自命名;Project Skills 遇到其他工程已有的工作区托管指引时会停止,避免覆盖工程身份。
{
"mcpServers": {
"funplay-<project>": {
"serverUrl": "http://127.0.0.1:<port>/"
}
}
}
Windsurf
除非你本地 Windsurf 版本要求不同的 MCP 配置格式,否则可直接使用与 Cursor 相同的 JSON 结构。
4. 验证连接
先在 AI 客户端里试几个安全请求:
“调用
get_scene_info,告诉我当前打开的是哪个场景。”
“读取
unity://project/context,总结当前编辑器状态。”
“调用
execute_code,返回当前激活场景名。”
如果这些都正常返回,说明 MCP server、resources 和主执行工具都已经连通。
5. 开始构建
打开你的 AI 客户端,试试:"创建一个 3D 平台跳跃关卡,包含 5 个浮空平台"
开始前说明
- 这是一个 仅限 Editor 的包,不会向最终构建产物添加运行时代码。
- MCP Server 端口对新工程按工程派生(20000-29999 区间);从旧版本升级的工程会保留原端口并记为 pin,手填的端口同样是 pin。MCP Server 窗口会显示端口来源与当前实际地址。客户端配置里的条目名按工程目录名命名(例如
funplay-love-town,只保留 ASCII 字母数字),多个工程不再互相覆盖同一个funplay条目。两个工程产品名相同时会解析出同一个条目名,此时后配置的那个会自动追加工程哈希,既不会覆盖对方,也不需要用户去开任何开关。 - 本地 MCP Server 配置保存在
UserSettings/FunplayMcpSettings.json。 - v0.6.9 默认
core精选 40 个工具,覆盖结构化检查与修改、UI 巡检和创建、可恢复的编译准备、统一任务查询、视觉证据、输入和日志。短任务可一次返回结果,get_task支持有限等待、状态变化后返回和退避提示;execute_code保留为项目特定逻辑的兜底。full保留全部 180 个工具,包括原有状态、编译与 Play 接口,以及配置、预览管理和专项诊断。已有自定义暴露列表不会被覆盖,可用get_tool_capabilities区分“已实现”和“已暴露”。升级后请通过 Project Skills 更新已安装的内置技能。 execute_codesafety checks 和更严格的文件系统 guard 现在可在 Funplay > MCP Settings 设置默认值,默认开启;它会阻止明显破坏性片段、宽泛的System.IO写入、原始文件流、绝对路径、用户/系统目录路径和../穿越路径,但它不是完整沙箱。客户端仍可在单次调用中用可选safety_checks参数显式覆盖。- 插件 debug 日志默认关闭,也可在 Funplay > MCP Settings 中开启;Warning 和 Error 始终会输出到 Unity Console。
- 所有已暴露的 MCP 工具都会直接执行,不再提供额外的 approval 开关。
- 菜单:
Funplay > Check for Updates可按安装来源自动更新:Git 安装会直接重新拉取,.unitypackage导入会自动下载并导入最新版。
能力概览
execute_code主工具优先 — 核心体验围绕一个内存 C# 执行工具构建,适合复杂编辑器/运行态编排。详见下方execute_code:内存 C# 执行。- 默认安全检查 —
execute_code现在有持久化、默认开启的 safety toggle,并包含更严格的文件系统 guard,适合 LM Studio 这类不明显暴露单次参数的客户端 - Play Mode 自动化闭环 — 进入运行模式、模拟键鼠输入、截图、查看日志、验证行为都能在同一 MCP 会话里完成
- 内建项目上下文 — 直接提供项目状态、当前场景、选择对象、编译错误、控制台输出和 MCP 交互记录资源
- 默认聚焦,必要时全量 — 默认
core工具集更利于 AI 选工具,需要时可切到full暴露开发版的全部 180 个工具 - 单 Unity 包落地 — 不需要额外 approval 开关,Unity 侧也不依赖单独 Python 守护进程
- 可扩展 — 支持 Attribute 发现自定义工具,也支持连接外部 MCP 服务
核心特性
- 180 个内置工具 — 覆盖场景编辑、脚本、资产、运行态控制、截图、性能分析、Prompts、Resources、结构化对象定位、SerializedObject 组件编辑、编辑器状态读写、菜单项兜底以及编辑器自动化,共 42 个模块
- 结构化返回 +
instanceId链式调用 — 工具返回{success, message, data}JSON 并附带稳定的instanceId,agent 后续直接by_id调用,不再受重名困扰 execute_code的IFunplayCommand模板 — 新模板自动 Undo(ctx.RegisterObjectCreation/Modification/DestroyObject)、结构化日志(ctx.Log/LogWarning/LogError),并把改动列表回传给 agent- Resources 与 Prompts — 暴露实时项目上下文、场景/选择/错误资源、资源模板,以及常见 Unity 工作流的可复用 MCP Prompt
- 输入模拟 + 截图验证 — 在 Play Mode 中模拟键盘/鼠标,再用 Game View / Scene View 截图验证结果
- 内置更新 — 直接在 Unity 菜单中检查更新,并根据安装方式自动重新拉取 Git 包或导入最新
unitypackage - 一键客户端配置 — 直接在 Unity 窗口里为 Claude Code、Cursor、Kimi、LM Studio、VS Code、Kiro、Trae、Codex、OpenCode、DeepSeek Harness、Antigravity 等客户端生成 MCP 配置
- 工具暴露控制 — 编辑
core和full各自暴露的具体工具 - 项目 Skills 管理器 — 为支持的 AI 客户端配置项目级 skills,包含内置的
unity-mcp-workflow与unity-ui-composition指引 - 插件设置 — 排查 MCP 连接或工具执行问题时,可开关详细 debug 日志
- 厂商无关 — 兼容任意支持 MCP 的 AI 客户端:Claude Code、Cursor、Kimi Code、LM Studio、Windsurf、Codex、VS Code Copilot 等
execute_code:内存 C# 执行
execute_code 是 Funplay MCP for Unity 的核心工具。AI 写一段 C#,通过 Roslyn 优先的内存编译流程完成编译,并在编辑器线程直接执行——agent 拿到 Unity Editor 与 Runtime 的全套 API,但完全不需要往项目里写文件。
- 零项目落盘编译 —— 优先使用 Unity 自带 Roslyn csc 编译,同时保留内存编译/内存执行流程。
Assets/下不会多出.cs文件,不会触发 domain reload,除非 snippet 自己显式改,否则项目状态不动。 - 运行前自动就绪 —— 每次调用都会先刷新 AssetDatabase 并等待 pending compilation 完成,外部文件编辑会被自动拾取,不需要额外
request_recompile。 - 自动 Undo + 结构化日志(推荐模板) —— 实现
IFunplayCommand,用注入的ExecutionContext:所有新建/修改/销毁的对象都自动进 editor Undo,改动列表也会回传给 agent。
using UnityEngine;
using UnityEditor;
using Funplay.Editor.Tools.Helpers;
using Funplay.Editor.Tools.Scripting;
public class CommandScript : IFunplayCommand
{
public void Execute(ExecutionContext ctx)
{
var go = GameObject.CreatePrimitive(PrimitiveType.Cube);
ctx.RegisterObjectCreation(go); // 自动 Undo + 追踪
ctx.Log("Created {0}", go.name);
ctx.ReturnValue = GameObjectSerializer.Describe(go, includeComponents: false);
}
}
返回里带 { logs, created, modified, destroyed, returnValue },agent 不用再回查场景就能确认改动。
旧模板(public static string Run())仍然兼容,适合一次性 inspection snippet——不需要结构化追踪的场景。
什么时候用 execute_code vs 专门工具 —— execute_code 适合多步编排、新颖查询、或者会被拆成 5-10 个细粒度调用的场景,一段 snippet 比一连串小工具更省。要是单字段组件修改、简单选中切换,或者已有专门工具能搞定的,优先用专门工具——对 LLM 调用成本更低、验证更直接。
与 Coplay 的对比
下表基于 Coplay 官方公开 GitHub README 所描述的能力与安装方式进行对比。
| 维度 | Funplay MCP for Unity | Coplay unity-mcp |
|---|---|---|
| Unity 侧架构 | Unity 包内置 HTTP MCP server | Unity bridge + 本地 Python MCP server |
| 额外本地依赖 | core 工作流下只需要 Unity 包本身 | 官方 quick start 要求 Python 3.10+ 与 uv |
| 主要交互模型 | 以 execute_code 为主,再配合少量高频辅助工具 | 以大量 manage_* 工具族为主 |
| 默认工具暴露 | 默认 core 精简工具集,可切 full | 公开文档强调广泛工具面 |
| 上下文能力 | 内建项目资源、资源模板、工作流 prompts、交互历史 | 公开 README 主要强调 bridge/server 与工具族 |
| Play Mode 验证 | 包内置运行模式控制、截图、日志、输入模拟 | 公开 README 强调广泛 Unity 管理与自动化能力 |
| 定位 | 轻量、直接、MIT 协议的 Unity MCP 服务器 | Coplay 维护的全功能 Unity bridge 方案 |
Coplay 信息来源:CoplayDev/unity-mcp
与 Unity AI Assistant 的对比
下表对比本仓库与 Unity Technologies 官方包 com.unity.ai.assistant(2026-05 时点 v2.7.0-pre.2)。
| 维度 | Funplay MCP for Unity | Unity AI Assistant |
|---|---|---|
| 最低 Unity 版本 | 2022.3 | 6000.3(仅 Unity 6) |
| 协议 / License | MIT 开源 | Unity Terms of Service,私有 |
| 部署 | Editor 内嵌 HTTP MCP server,纯本地 | Editor + 原生 Relay 子进程 + Unity Cloud 后端 |
| 计费 | 免费,用户自带 AI 客户端 | Credits 点数制(Unity Dashboard) |
| 工具暴露 | 开发版 180 工具 / 42 模块,core (40) / full profile | ~15 个 MCP 工具(多数为 Manage* 大粒度族) |
| 通用逃生口 | execute_code — Roslyn 优先内存编译、IFunplayCommand + Undo、无沙箱(客户端层审批) | RunCommand — 命名空间黑名单沙箱 |
| Play Mode 验证 | 完整闭环:进入 / 模拟输入 / 截图 / 读日志 / 退出 | 仅进入/退出,无输入模拟 |
| 资产生成器 | 不内建(通过 execute_code 组合外部 API) | 内建 Image / Mesh / PBR / Sound / Animation 五类生成器 |
| 主要客户端模型 | BYO 任意 MCP 客户端(Claude Code / Cursor / Kimi / LM Studio / Codex / VS Code) | 自带对话窗口 + ACP 经 Gateway 接 Claude/Gemini |
| 离线可用 | ✅ 工具调用本身全本地(推理依赖所选客户端) | ❌ 推理必须连 Unity Cloud |
长文对比见 Funplay Unity MCP 与 Unity AI Assistant 详细对比。
MCP 能力结构
当前开源包有四层高价值能力:
- Tools — 开发版
full下共 180 个工具,core下 40 个高频工具 - Primary execution —
execute_code用于复杂编辑器/运行态编排 - Prompts — 参数化工作流 Prompt:
edit_prefab_safely、verify_compilation、enter_play_and_recover、wire_serialized_references、create_playable_prototype。项目可通过根目录下的mcp-prompts/*.md注册专属 Prompt。 - Resources — 项目上下文、场景摘要、选择状态、编译错误、控制台错误、MCP 交互记录,以及按对象/组件/资源路径展开的模板资源
项目 Prompt
项目 Prompt 文件使用轻量、无额外依赖的 front-matter 格式,后面跟随工作流正文:
---
name: validate_activity
description: Open and validate a project activity.
arguments: activity_key(required), theme_id
---
Open activity {activity_key} with theme {theme_id}, then validate its runtime state.
Prompt 名称和参数名必须匹配 [a-z][a-z0-9_-]{0,63}。prompts/get 会拒绝缺失的必填参数、未知参数和非字符串参数;未提供的可选参数占位符会替换为空字符串。定义会在 MCP Server 启动时缓存,因此修改 Prompt 文件后需重启 Server 或触发一次 Unity 域重载。
内置工具
v0.6.9 提供 180 个工具函数,覆盖 42 个模块,默认暴露其中 40 个高频工具。
新增 UI 工作流包括:prepare_editor 持久任务、audit_ui 只读巡检、组件属性查询和 Sprite 关联检查、统一截图/输入坐标、项目级 TMP/字体材质/预制体/输入模块默认值、录屏动作标记与关键帧提取,以及可恢复的预览会话。详见 完整工作流指南 和 实现与验证清单。两项内置 skills 也已同步这些规则,仍为 built-in;已有安装可通过 Project Skills 更新。
| 分类 | 工具 |
|---|---|
| 游戏对象 | create_primitive, create_game_object, delete_game_object, find_game_objects, get_game_object_info, set_transform, duplicate_game_object, rename_game_object, set_parent, add_component, set_tag_and_layer, set_active |
| 层级 | get_hierarchy |
| 组件 | get_component_properties, list_components, set_component_property, set_component_properties |
| 组件批处理 | copy_component, paste_component_values, add_component_to_many |
| 脚本 | create_script, edit_script, patch_script |
| 资产 | create_material, assign_material, find_assets, delete_asset, rename_asset, copy_asset |
| 资产导入 | get_asset_import_settings, set_asset_import_settings |
| 引用关系 | find_references, find_broken_references |
| 网格 | get_mesh_info |
| 材质属性 | get_material_properties, set_material_property |
| 文件 | read_file, write_file, search_files, list_directory, exists |
| 场景 | get_scene_info, list_scenes, load_scene_additive, unload_scene, list_dirty_scenes, save_all_scenes, save_scene, open_scene, create_new_scene, enter_play_mode, exit_play_mode, set_time_scale, get_time_scale |
| 物理查询 | physics_raycast, physics_overlap, physics2d_overlap_point |
| 粒子系统 | particle_control |
| 灯光 | get_lighting_settings, set_lighting_settings, bake_lightmaps |
| Timeline | director_evaluate |
| 预制体 | create_prefab, instantiate_prefab, unpack_prefab, open_prefab_stage, save_prefab_stage, close_prefab_stage, set_prefab_property, set_prefab_properties |
| ScriptableObject | create_scriptable_object, get_scriptable_object, set_scriptable_object_properties |
| UI | create_canvas, create_button, create_text, create_image, raycast_at_point, get_ui_defaults, configure_ui_defaults, create_project_ui |
| UI 巡检 | audit_ui, get_ui_audit, cancel_ui_audit |
| UI 预览 | start_ui_preview_session, get_ui_preview_session, end_ui_preview_session |
| 结构化检查 | find_project_types, inspect_ui_sprites, get_tool_capabilities |
| 视觉坐标 | get_visual_coordinates, get_object_screen_bounds |
| 动画 | create_animation_clip, create_animator_controller, assign_animator, get_animator_state, set_animator_parameter, play_animator_state |
| 相机 | get_camera_properties, set_camera_projection, set_camera_settings, set_camera_culling_mask |
| 截图 | capture_game_view, capture_simulator_view, capture_scene_view, capture_multiview, capture_editor_window |
| 录屏 | record_game_view, mark_recording, extract_recording_frames, get_recording_frame |
| 脚本执行 | execute_code, get_execute_code_history, replay_execute_code, clear_execute_code_history |
| 输入模拟 | simulate_key_press, simulate_key_combo, simulate_mouse_click, simulate_mouse_drag, simulate_ui_scroll |
| 性能分析 | get_performance_snapshot, analyze_scene_complexity |
| Profiler | profiler_start, profiler_stop, profiler_status, get_frame_timing, get_counters, get_object_memory, get_top_memory_objects, memory_take_snapshot, memory_list_snapshots, memory_compare_snapshots, frame_debugger_enable, frame_debugger_disable, frame_debugger_get_events |
| 内存快照 | memory_take_full_snapshot, memory_list_full_snapshots, memory_open_snapshot_in_profiler, memory_query_top_objects, memory_query_references |
| 包管理 | install_package, remove_package, list_packages |
| 编译 | wait_for_compilation, request_recompile, get_compilation_errors, get_reload_recovery_status |
| 编辑器任务 | prepare_editor, get_editor_operation, list_editor_operations, cancel_editor_operation |
| 统一任务查询 | get_task(只读状态查询、有限等待和状态变化后返回) |
| 测试 | run_tests, get_test_job, cancel_test_run |
| 编辑器状态 | get_editor_state, get_selection, set_selection, get_prefab_stage, get_active_tool, set_active_tool, get_windows, get_tags, add_tag, remove_tag, get_layers, add_layer, get_build_settings |
| 项目设置 | get_project_settings |
| 撤销/重做 | undo, redo, get_undo_state |
| 菜单项 | execute_menu_item, validate_menu_item |
| 可视化反馈 | select_object, focus_on_object, ping_asset, log_message, show_dialog, get_console_logs |
📊 完整的 Profiler 工具参考、实现细节、已知限制和测试报告见 PROFILER_TOOLS_CN.md。
录制 Game View 视频
默认 core 工具集中的 record_game_view 可将 UI 动画、转场和连续操作录成一段无音轨 MP4,用于视觉检查。使用 Unity 自带的 MediaEncoder,不需要安装 Recorder 包或外部编码器。
- 进入 Play Mode,等待域重载恢复,并打开 Game 标签页使其正常渲染。
- 调用
record_game_view,参数为{"action":"start","duration_seconds":10,"fps":15,"max_dimension":1280},保留返回的recording_id。 - 开始调用立即返回,可在录制期间继续模拟输入和操作;达到时长上限后自动停止。
- 使用
{"action":"status","recording_id":"<id>"}查询状态。若要提前结束,调用action:"stop",然后继续查询直至文件完成封装。 - 只有
ready:true时才读取返回的本地path。MCP 响应不会内嵌视频数据;远程客户端需要另行获得 Unity 所在机器的文件访问能力。
视频采用唯一文件名,保存在 <UnityProject>/Library/FunplayMcp/Recordings/,不会自动删除。开始录制可设置 1–120 秒、1–60 目标 FPS,以及 128–1920 像素的最长边;保持宽高比、不放大原画面,并对齐到编码所需的偶数尺寸。状态还包含实际帧数、经过时间、结束原因、文件大小和错误信息。查询或停止时携带录制 ID,可避免误操作新一段录制。
目前支持具有图形设备的 macOS / Windows Unity Editor,且必须处于 Play Mode;暂不录音。画面来自已经渲染的 Game View,包含 Overlay UI,不额外重绘场景相机。录制时保持 Game 标签页渲染,不要改变其分辨率:隐藏、关闭标签页或改变渲染分辨率会结束录制并报错,避免录入旧画面或拉伸画面。退出 Play Mode 会封装视频;脚本重编译或域重载会提前封装,并在编辑器会话中保留 interrupted 状态。无论结束原因如何,都以 ready:true 为可读取条件。慢帧会保留真实时间戳,但录制本身有开销,不能用于帧精确的性能测量。
添加自定义工具
通过简单的 Attribute 标注即可创建自定义工具:
using System.ComponentModel;
[ToolProvider("MyTools")]
public static class MyCustomTools
{
[Description("Spawns enemies at random positions in the scene")]
public static string SpawnEnemies(
[ToolParam("Number of enemies to spawn", Required = true)] int count,
[ToolParam("Prefab path in Assets")] string prefabPath)
{
// Your implementation here
return $"Spawned {count} enemies";
}
}
方法会被自动发现,名称转换为 snake_case(spawn_enemies),并通过 MCP 自动生成 JSON Schema 定义暴露给 AI。
架构
MCP Server (HTTP JSON-RPC 2.0)
└─ MCPRequestHandler (协议处理)
└─ MCPExecutionBridge
└─ FunctionInvokerController (反射式调用)
└─ Tool Functions (180 个内置工具,42 个模块)
外部 AI 客户端 → HTTP 请求 → MCPRequestHandler → MCPExecutionBridge → FunctionInvokerController → 工具方法
环境要求
- Unity 2022.3 或更高版本
- .NET / Mono +
Newtonsoft.Json
参与贡献
欢迎贡献!提交 PR 前请阅读 贡献指南。
许可证
MIT — 可自由使用、修改、分发,也可集成到商业或开源项目中。