关于 FunseaAI Unity MCP
所提供的 README 将 FunseaAI Unity MCP 描述为 Funplay MCP for Unity,这是一个 Unity 软件包和本地 MCP 服务,可连接 AI 助手与运行中的 Unity 项目。文档列出的能力包括创建场景和脚本、运行时验证、输入模拟、性能分析及编辑器自动化。
主要功能
- 01创建和编辑 Unity 场景
- 02生成脚本
- 03验证运行时行为
- 04模拟输入
- 05分析性能并自动化编辑器任务
- 06从 Unity 配置 MCP 客户端
适用场景
- 01根据自然语言请求构建游戏场景
- 02生成并验证 Unity 项目脚本
- 03通过 AI 助手检查运行中的编辑器项目
MCP 相关
Unity 软件包会运行本地 MCP 服务,向 MCP 客户端开放可配置的 core 或 full 工具、项目上下文资源和执行能力。它支持按项目设置端点,并提供一键客户端配置。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Funplay MCP for Unity
最先进的 Unity Editor MCP 服务
中文 | English
💖 如果你觉得这个项目有用,请考虑点个 Star。这能让更多 Unity 开发者发现它,并支持项目持续开发。
Funplay MCP for Unity 是一个采用 MIT 许可证的 Unity Editor MCP 服务,可让 Claude Code、Cursor、Kimi Code、LM Studio、Windsurf、Codex 和 VS Code Copilot 等 AI 助手直接在运行中的 Unity 项目内操作。
用一句话描述你的游戏——你的 AI 助手便会通过 Funplay MCP for Unity 内置的工具,在 Unity 中构建游戏,包括创建场景、生成脚本、验证运行时、模拟输入、分析性能和自动化编辑器操作。
“制作一款 10x10 网格的贪吃蛇游戏,包含食物生成、分数 UI 和游戏结束画面”
你的 AI 助手会通过 Funplay MCP for Unity 完成这一切:创建场景、生成所有脚本、设置 UI 并配置游戏逻辑——仅需一个提示词。
16 秒演示——AI 生成 3D 模型,并将其端到端集成到场景中。观看 HD 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
💡 克隆或安装之前,如果能在 GitHub 上点个 ⭐,我们将不胜感激。
可选:通过 OpenUPM 安装
如果你希望 Unity Package Manager 显示基于注册表的包版本历史并允许选择版本,请改为从 OpenUPM 安装,而不是从 Git 安装。
使用 OpenUPM CLI:
openupm add com.gamebooom.unity.mcp
或者在 Packages/manifest.json 中手动添加作用域注册表:
{
"scopedRegistries": [
{
"name": "OpenUPM",
"url": "https://package.openupm.com",
"scopes": [
"com.gamebooom"
]
}
],
"dependencies": {
"com.gamebooom.unity.mcp": "0.7.2"
}
}
如果你之前通过 Git URL 安装,请先移除 Git 依赖项,再从 OpenUPM 安装。通过 Git 安装的包在 Unity 中只会显示解析后的 Git 版本,也不会显示基于注册表的 Version History 列表。
2. 启动 MCP 服务
通过 Funplay → MCP Server 启动服务。
每个新项目都会获得一个根据项目路径生成的独立端口,因此在不同项目中打开的两个编辑器不会争用同一个端口。MCP Server 窗口会显示准确的 URL(http://127.0.0.1:<port>/mcp/project/<project-id>/);一键配置会为你写入该 URL。在 Server Port 中输入端口可固定使用某个端口(例如用于 CI 或防火墙规则),选择 Use Per-Project Port 则会改为按项目生成端口。
升级会保留现有的固定端口,但 v0.7.1 会将生成的 URL 绑定到项目。旧的根 URL 仍可读取;写入则需要经过验证的 expected_context。在现有的蓝色 Skills 通知卡片中重新运行 Reconfigure MCP + Skills 并重新连接客户端,或者明确传入来自独立验证的目标 Editor 的守卫信息。若希望该项目与另一个编辑器同时运行,请点击 Use Per-Project Port。完整设置指南请参阅同时运行多个 Unity 项目。
如果窗口报告正在使用备用端口,请勿使用仍指向被占用固定端口的客户端配置项,否则可能连接到占用该端口的进程。在你点击 Use Per-Project Port 或 Pin Current Port,且服务完成重启之前,一键配置会保持禁用。
默认传输方式为进程内直接 HTTP。如果需要在 Unity 脚本重新编译或 Play Mode 域重新加载时保持更稳定的连接,请在 MCP Server 窗口中启用 Experimental Broker Mode。它会使用 Unity 捆绑的 Mono 运行一个轻量本地代理,为 MCP 客户端保留相同的 127.0.0.1 端口,且无需更改客户端配置。
如果要编辑 core 或 full 实际公开的工具,请打开 Funplay → Tool Exposure。
如果需要调整 execute_code 的安全默认设置或插件调试日志,请打开 Funplay → MCP Settings。
3. 配置 AI 客户端
请先使用 Funplay > MCP Server 窗口内置的 One-Click MCP Configuration。
选择目标客户端,点击 Configure,软件包会为你写入推荐的 MCP 配置项。
对于 Claude Code、Cursor、Codex、OpenCode 和 DeepSeek Harness,点击 Configure + Skills 还会安装两个内置项目技能。
如果希望为当前 Unity 项目设置特定的 AI 指引,请打开 Funplay → Project Skills,选择受支持的平台,并安装内置的 unity-mcp-workflow 和 unity-ui-composition 技能。UI 技能涵盖响应式竖屏和横屏 uGUI 工作。
0.7.0 版保留了这两个内置技能,并新增了四份针对特定任务的参考资料,内容参考了 Unity 官方插件 0.1.8-beta:UI 框架选择、安全编辑 Sprite 导入器、TMP/本地化验证,以及软件包就绪情况。Agent 只会读取与其任务相关的参考资料;不会添加默认工具或额外技能。MCP 优先的操作方式、项目约定、预制体保留和设计还原度仍是首要准则。请通过 Project Skills 更新现有安装;缺失或过时的参考资料也会触发技能更新通知。用户拥有的参考文件不会被覆盖。
0.7.1 版为两个内置技能都添加了执行信任指南,包括项目身份、实际帧进度、严格的输入路由、自有验证清理,以及对阻塞性 Unity 原生对话框的条件处理。蓝色共享设置卡片会通过一个 Reconfigure MCP + Skills 操作报告 MCP 和 Skills 问题;解决其中一个问题时会保留另一个问题。请参阅执行信任与迁移。
如果你更喜欢手动编辑配置文件,请将以下示例用作备用参考。将 <project> 替换为此项目的条目名称,将 <port> 替换为其端口,并将 <project-id> 替换为完整绑定 URL 中的 ID——请从 MCP Server 窗口复制这些值,而不要从其他 Editor 窗口复制:
Claude Code / Claude Desktop
{
"mcpServers": {
"funplay-<project>": {
"type": "http",
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
Cursor
{
"mcpServers": {
"funplay-<project>": {
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
LM Studio
LM Studio 的 mcp.json 位置可能因版本和平台而异。建议在 LM Studio 中使用 Program > Install > Edit mcp.json。Funplay 的一键配置按钮会打开 LM Studio 的 lmstudio://add_mcp 链接,并且仅在已有配置文件时更新该文件,而不会创建猜测的路径。
{
"mcpServers": {
"funplay-<project>": {
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
VS Code
{
"servers": {
"funplay-<project>": {
"type": "http",
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
Trae
{
"mcpServers": {
"funplay-<project>": {
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
Kiro
{
"mcpServers": {
"funplay-<project>": {
"type": "http",
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
Kimi / Kimi Code
当前版本的 Kimi Code 会从项目级 .kimi-code/mcp.json 加载 MCP 服务(官方 MCP 文档)。Funplay 的一键配置目标会将配置写入此文件,因此当前 Unity 服务仅对在此项目中启动的 Kimi 会话可见。如果这台机器上只有旧版 Kimi CLI 数据目录,则会改为写入兼容的用户级 ~/.kimi/mcp.json。完成配置后,请从 Unity 项目根目录启动新的 Kimi 会话;首次使用时,请检查回环 URL 并信任此工作区。生成的项目文件包含这台机器的本地端口,因此通常应避免提交该文件,除非团队有意共享一个固定端口。
{
"mcpServers": {
"funplay-<project>": {
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
Codex
[mcp_servers.funplay-<project>]
url = "http://127.0.0.1:<port>/mcp/project/<project-id>/"
OpenCode
配置写入仓库自身的 .opencode/opencode.json(而非全局配置),因此只有在此仓库中启动的 OpenCode 会话才能使用此 Editor 的工具。
{
"mcp": {
"funplay-<project>": {
"type": "remote",
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/",
"enabled": true
}
}
}
DeepSeek Harness
配置会以带分隔标记的托管代码块形式写入每个 DeepSeek Harness 配置文件中的 ~/.dsh/profiles/<profile>/cordis.patch.yml,因为 DSH 会在每次启动时通过 --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>/mcp/project/<project-id>/
# <<< funplay-mcp:funplay-<project> end
Antigravity
配置会写入工作区本地的 .agents/mcp_config.json,其中的 mcpServers 条目使用 serverUrl 指向 Funplay 的 Streamable HTTP 端点。这样可避免服务出现在无关工作区中。请使用支持工作区 MCP 配置的当前版本 Antigravity,然后重新加载其 MCP 服务。
工作区根目录是包含 .git 的最近上级目录(包括 worktree 的 .git 文件);如果 Unity 项目位于 Git 仓库之外,则使用 Unity 项目目录。请将该目录作为 Antigravity 工作区打开。即使 Unity 项目嵌套在仓库中,配置 + Skills 也会将 .agents/mcp_config.json、.agents/skills/ 和托管的 AGENTS.md 代码块放在同一根目录下。其他客户端仍使用其现有的指令位置;如果路径相同,则会共享该代码块。
面板会报告 ~/.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>/mcp/project/<project-id>/"
}
}
}
Windsurf
使用与 Cursor 相同的 JSON 结构,除非你的本地 Windsurf 版本需要采用不同的 MCP 配置格式。4. 验证连接
打开你的 AI 客户端,先尝试几个安全的请求:
- “调用
get_scene_info,告诉我当前打开的是哪个场景。” - “读取
unity://project/context,并总结当前编辑器状态。” - “使用
execute_code返回当前活动场景的名称。”
如果这些请求都能正常工作,说明 MCP 服务、资源和主要执行工具已正确连接。
5. 开始构建
打开你的 AI 客户端并尝试:“创建一个有 5 个浮空平台的 3D 平台跳跃关卡”
开始之前
- 此软件包仅适用于 Editor。它不会向已构建的游戏添加运行时组件。
- 对于新项目,MCP 服务端口会按项目派生(范围为 20000-29999);也可以固定端口。由较早版本升级的项目会保留现有端口并将其设为固定端口,你输入的任何端口也都会被固定。MCP Server 窗口会显示端口的来源和活动 URL。项目的客户端配置条目以项目目录命名(例如
funplay-love-town),因此配置多个项目时不会再覆盖同一个共享的funplay条目。两个项目若共用同一个目录名,解析出的条目名称也会相同;配置第二个项目时会自动附加项目哈希,因此不会覆盖任何内容,也无需启用任何设置。 - 本地 MCP 服务设置存储在
UserSettings/FunplayMcpSettings.json中。 - 软件包默认使用
core:包含 40 个专注于结构化检查/编辑、UI 审查与创作、可恢复的 Editor 准备、共享任务状态、视觉证据、输入和日志的工具。简短的 MCP 任务可在一次响应中完成;get_task支持有界等待和状态变更修订。execute_code仍可作为项目专用的备用方案。full保留全部 185 个工具,包括旧版状态/编译/Play API、验证管理、引用事务和专用诊断。自定义工具公开列表会保留;get_tool_capabilities可区分实现情况、公开情况以及相关运行时后端的可用性。 - 生成的客户端 URL 按项目划分。执行写入前,请独立验证 initialize 响应中的项目身份。旧的根 URL 仍可读取,但修改操作需要经过验证的
expected_context;若不匹配,则不会执行任何工具。请参阅执行信任与迁移。 - 默认情况下,
execute_code安全检查和更严格的文件系统防护已从 Funplay > MCP Settings 启用。防护会阻止明显的破坏性代码片段、广泛的System.IO写入、原始文件流,以及绝对路径、用户路径、系统路径和路径遍历,但它并非完整的沙盒。客户端仍可在每次调用时通过可选参数safety_checks覆盖默认设置。 - 插件调试日志默认关闭,也可从 Funplay > MCP Settings 启用。警告和错误始终会写入 Unity Console。
- 所有公开的 MCP 工具都会直接运行,无需额外的审批开关。
- 菜单:
Funplay > Check for Updates可原位更新 Git 安装,或自动下载并导入最新的unitypackage。
为什么开发此项目
- 优先使用结构化工具 — 使用专用工具完成常见的检查和编辑任务;遇到有防护措施的项目特定需求时,仍可使用内存中的
execute_code。参见execute_code: In-Memory C# Execution。 - 默认启用安全检查 —
execute_code现在默认启用持久化安全开关,其中包括更严格的文件系统防护,适用于无法清晰展示每次调用参数的客户端 - 自动化 Play Mode — 进入 Play Mode、模拟键盘和鼠标输入、截取屏幕截图、检查日志,并在同一个 MCP 会话中验证行为
- 内置项目上下文 — 提供项目状态、活动场景、选中项、编译状态、控制台输出和 MCP 交互历史的实时资源
- 默认精简,需要时全面开放 —
core提供 40 个专用工具;full提供全部 185 个内置工具 - 单个 Unity 包 — 无需额外的审批界面,无需点击确认外部守护进程,Unity 侧插件本身也不依赖 Python
- 可扩展 — 通过基于属性的发现机制添加自定义工具,也可按需将 Unity 连接到外部 MCP 服务
亮点
- 185 个内置工具 — 涵盖场景编辑、资源、脚本、Play Mode 控制、视觉证据、结构化检查、受控引用编辑和有界验证,共 43 个模块
- 结构化返回值 +
instanceId链式调用 — 工具以{success, message, data}JSON 格式返回结果,并提供稳定的instanceId字段,让 Agent 能可靠地串联by_id调用,而不是按名称重新解析 - 供
execute_code使用的IFunplayCommand— 新的代码片段模板支持自动 Undo(ctx.RegisterObjectCreation/Modification/DestroyObject)、结构化日志(ctx.Log/LogWarning/LogError),并向 Agent 返回跟踪记录的变更日志 - 资源与提示词 — 提供实时项目上下文、场景/选中项/错误资源、资源模板,以及可复用的工作流提示词
- 输入模拟 + 屏幕截图 — 通过键盘/鼠标模拟驱动 Play Mode,并使用游戏/场景截图验证结果。v0.7.2 新增基于真实帧的连续鼠标/单指触控拖动、有界等待和受控清理;参见时序与后端限制。
- 内置更新功能 — 可从 Unity 菜单检查更新,并选择重新拉取 Git 包,或自动导入最新的
unitypackage - 一键配置客户端 — 直接在 Unity 窗口中为 Claude Code、Cursor、Kimi、LM Studio、VS Code、Kiro、Trae、Codex、OpenCode、DeepSeek Harness、Antigravity 等客户端生成 MCP 配置项
- 工具开放范围控制 — 编辑
core和full精确开放的工具 - 项目技能管理器 — 为受支持的 AI 客户端配置项目级技能,并提供内置的
unity-mcp-workflow和unity-ui-composition指引 - MCP 设置 — 调整
execute_code安全默认值,并在排查 MCP 连接或工具执行问题时启用详细的插件调试日志 - 不绑定厂商 — 适用于任何支持 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 和运行时 API。
- 编译不占用项目空间 — 代码片段首先使用 Unity 自带的 Roslyn csc 编译,同时保留内存编译/执行流程。不会在
Assets/下写入.cs文件,不会触发域重载,也不会触及代码片段本身操作以外的项目状态。 - 运行前确保编辑器就绪 — 每次调用都会刷新 AssetDatabase,并等待任何待处理的编译完成,然后再编译代码片段,因此外部文件编辑会自动生效,无需单独调用
request_recompile。 - 自动撤销 + 结构化日志(推荐模板) — 实现
IFunplayCommand并使用注入的ExecutionContext,使每个创建/修改/销毁的对象都参与编辑器撤销,并将变更记录返回给 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); // auto-Undo + tracked
ctx.Log("Created {0}", go.name);
ctx.ReturnValue = GameObjectSerializer.Describe(go, includeComponents: false);
}
}
响应包含 { logs, created, modified, destroyed, returnValue },因此 Agent 无需重新查询场景,即可准确确认哪些内容发生了变化。
旧版模板(public static string Run())仍受支持——适用于一次性检查代码片段,无需进行结构化跟踪的场景。
何时使用 execute_code,何时使用专用工具 — execute_code 适用于多步骤编排、新颖的读取需求,以及串联 5–10 次狭窄范围的工具调用比单个代码片段更繁琐的情况。对于单字段组件编辑、简单的选择更改,或现有工具已能覆盖的操作,优先使用专用工具——LLM 调用成本更低,也更容易验证。
与 Coplay 的比较
下表将本仓库与 GitHub 上公开文档描述的 Coplay 开源 unity-mcp 仓库行为进行了比较。
| 领域 | Funplay MCP for Unity | Coplay unity-mcp |
|---|---|---|
| Unity 端架构 | 内嵌 Unity Editor 软件包,带有内置 HTTP MCP 服务 | Unity 桥接程序加本地 Python MCP 服务 |
| 额外的本地前置条件 | 核心工作流仅需 Unity 软件包 | 根据公开的快速入门指南,需要 Unity、Python 3.10+ 和 uv |
| 主要工作流风格 | 优先使用 execute_code,然后使用专用辅助工具 | 通过桥接程序提供范围广泛的 manage_* 工具系列 |
| 默认工具公开范围 | 精简的 core 配置,可选扩展为 full | 公开文档强调始终可用的广泛工具集 |
| 内置上下文模型 | 项目资源、资源模板、工作流提示词、交互历史 | 公开 README 强调工具系列和桥接/服务工作流 |
| Play 模式验证 | 软件包内置 Play 模式控制、截图、日志和输入模拟 | 公开 README 强调广泛的 Unity 管理与自动化工具 |
| 定位 | 轻量、直接、采用 MIT 许可证的 Unity MCP 服务,用于 AI 驱动的编辑器控制 | 由 Coplay 维护的功能齐全的 Unity 桥接程序,服务端采用 Python 搭建 |
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) |
| 许可证 | MIT,开源 | Unity 服务条款,专有 |
| 部署方式 | 在 Editor 中运行的本地 HTTP MCP 服务,无云服务 | Editor + 原生 Relay 子进程 + Unity Cloud 后端 |
| 计费 | 免费,用户自备 AI 客户端 | 基于点数(Unity Dashboard) |
| 工具开放范围 | 43 个模块共 185 个工具,core(40 个)/ full 配置 | 约 15 个 MCP 工具(主要是 Manage* 系列) |
| 通用扩展接口 | execute_code — 优先使用 Roslyn 进行内存编译,支持 IFunplayCommand + Undo,无沙箱(由客户端批准) | RunCommand — 命名空间黑名单沙箱 |
| Play 模式验证 | 完整流程:进入 / 模拟输入 / 截取 / 读取日志 / 退出 | 仅进入/退出;不模拟输入 |
| 资源生成器 | 未内置(通过 execute_code 组合外部 API) | 原生图像 / 网格 / PBR / 音效 / 动画生成器 |
| 主要客户端模式 | 自带任意 MCP 客户端(Claude Code / Cursor / Kimi / LM Studio / Codex / VS Code) | 内置聊天窗口 + 通过 Gateway 使用 Claude/Gemini 的 ACP |
| 可离线使用 | 可以用于工具调用(推理能力取决于所选客户端) | 不可以(推理需要 Unity Cloud) |
如需了解这两种方案的详细比较,请参阅 Funplay Unity MCP 与 Unity AI Assistant 详细比较(中文)。
MCP 功能
当前开源包提供四个高价值功能层:
- 工具 —
full配置共 185 个工具,core配置包含 40 个专用工具 - 主要执行方式 — 使用
execute_code进行丰富的 Editor/运行时编排 - 提示词 — 参数化工作流提示词:
edit_prefab_safely、verify_compilation、enter_play_and_recover、wire_serialized_references、create_playable_prototype。项目可通过项目根目录中的mcp-prompts/*.md文件添加自定义提示词。 - 资源 — 项目上下文、场景摘要、选择状态、编译错误、控制台错误、MCP 交互历史,以及场景对象、组件和资源路径的资源模板
项目提示词
项目提示词文件采用简洁、无依赖的 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.
名称和参数名称必须符合 [a-z][a-z0-9_-]{0,63}。prompts/get 会拒绝必填、未知及非字符串参数。未提供的可选占位符会替换为空字符串。定义会在 MCP 服务启动时缓存,因此修改提示词文件后,请重启服务或触发 Unity 域重新加载。
内置工具
版本 0.7.2 包含 43 个模块中的 185 个工具函数,其中 40 个高频工具默认开放。有关身份迁移、严格输入、连续拖动、自有资源清理、引用保留和证据复用,请参阅执行信任与验证。
| 类别 | 工具 |
|---|---|
| 游戏对象 | 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, patch_serialized_reference |
| 网格 | 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 |
| 时间轴 | 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, inspect_render_bindings |
| 验证 | verification_scope, save_verification_evidence, read_verification_evidence(完整;状态通过 get_task 获取) |
| 视觉检查 | 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_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.md。
有关端到端准备、只读审计、结构化查询、项目 TMP/Prefab/输入默认设置、捕获坐标映射、录制标记/关键帧,以及可恢复的预览会话,请参阅 可靠的 UI 工作流。两个内置的 Project Skills 都包含这些工作流;使用 Project Skills 更新现有安装。从 v0.6.9 开始,这些工具和技能更新均已包含在内。
录制 Game View 视频
使用 record_game_view(包含在 core 中),将 UI 动画、过渡和多步骤交互录制为简短的无声 MP4,以便查看。它使用 Unity 内置的 MediaEncoder;无需 Recorder 包或外部编码器。
- 进入 Play Mode,等待重新加载恢复完成,并打开 Game 选项卡使其渲染。
- 调用
record_game_view,参数为{"action":"start","duration_seconds":10,"fps":15,"max_dimension":1280}。保存其recording_id。 - 录制期间执行交互。
start会立即返回,达到时长限制后会自动停止录制。 - 使用
{"action":"status","recording_id":"<id>"}轮询状态。若要提前结束,请使用action:"stop",然后持续轮询,直到完成最终处理。 - 当
ready:true时,将返回的path作为本地视频文件读取。视频字节不会嵌入 MCP 响应;远程客户端需要单独访问 Unity 机器上的文件。
片段会在 <UnityProject>/Library/FunplayMcp/Recordings/ 下使用唯一文件名,并一直保留,直到你将其删除。start 接受 1–120 秒的时长、1–60 FPS 的目标帧率,以及 128–1920 像素的最大尺寸;它会保持宽高比,不会放大,并使用偶数编码尺寸。状态包含实际帧数、经过时间、停止原因、文件大小和错误。轮询或停止时请传入录制 ID,以免误操作更新的片段。
目前支持处于 Play Mode 的 macOS 和 Windows Editor,且不包含音轨。它会捕获渲染后的 Game View(包括覆盖层 UI),不会重新渲染场景摄像机。录制期间请保持 Game 选项卡处于渲染状态,且不要调整其大小:隐藏或关闭选项卡,或更改其渲染分辨率,都会导致录制报错停止,而不是静默捕获过时或拉伸的帧。退出 Play Mode 会完成片段的最终处理;脚本/域重新加载会提前完成处理,并在编辑器会话中保留 interrupted 回执。仅使用 ready:true 的文件。较慢的帧会保留其实际时间戳,但录制会增加开销:这是视觉证据,不是帧级精准的性能分析。
添加自定义工具
使用简单的属性注释创建自己的工具:
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 定义的形式公开。
架构
MCP Server (HTTP JSON-RPC 2.0)
└─ MCPRequestHandler (protocol handling)
└─ MCPExecutionBridge
└─ FunctionInvokerController (reflection-based invocation)
└─ Tool Functions (185 built-in tools across 43 modules)
External AI Client → HTTP Request → MCPRequestHandler → MCPExecutionBridge → FunctionInvokerController → tool method
要求
- Unity 2022.3 或更高版本
- 带有
Newtonsoft.Json的 .NET / Mono
贡献
欢迎贡献!提交 PR 前,请阅读贡献指南。
许可证
MIT — 可自由用于、修改、分发,并集成到商业或开源项目中。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。