Unity MCP
Unity和使用模型上下文协议(MCP)的AI助手之间的桥梁。
概述
Unity MCP是Unity游戏开发的模型上下文协议的开源实现。它使AI助手能够通过标准化的界面与Unity游戏环境进行交互,允许AI辅助游戏开发、自动测试、场景分析和运行时调试。
建筑
架构已经简化,可以使用AILogger进行持久化,不再需要单独的服务器组件:
AI Assistant Unity-MCP STDIO Client Unity Client AILogger- AI助手:使用MCP协议与Unity MCP STDIO客户端通信
- Unity MCP STDIO客户端:将命令转发到Unity客户端并将结果存储在AILogger中
- Unity客户端:在Unity中执行命令并返回结果
- AILogger:存储日志和结果以供以后检索
Unity MCP STDIO客户端直接与Unity客户端通信,Unity客户端为代码执行和查询提供端点。查询工具通过将查询包装在 return 声明。
特性
- 在Unity运行时环境中执行C#代码
- 检查游戏对象及其组件
- 分析场景层次和结构
- 运行测试并接收结果
- 调用游戏对象和组件的方法
- 在运行时修改游戏状态
部署选项
- Unity编辑器扩展:一个在游戏执行周期之外持续存在的编辑器扩展
- Docker容器:一个通过网络与Unity通信的容器化版本
- NPX包:一个可以通过NPX安装和运行的Node.js包
文档
- MCP架构:MCP架构和命名空间概述
- MCP STDIO客户端:有关MCP STDIO客户端及其日志记录功能的信息
- 查询工具:有关查询工具及其工作原理的详细信息
- AILogger集成:有关AILogger集成的详细信息
- api参考:有关API终结点的详细信息
- 安装指南:安装和设置Unity MCP的分步说明
- 开发指南:有关开发环境和工作流程的信息
- 热重载指南:关于开发环境中热重载的详细信息
- 热重载快速参考:热重载命令和提示的快速参考指南
- 贡献指南:项目贡献指南
入门指南
要开始使用Unity MCP,请按照以下步骤操作:
- 克隆存储库:
git clone https://github.com/TSavo/Unity-MCP.git
cd Unity-MCP- 安装依赖项:
npm install- 构建项目:
npm run build- 启动MCP STDIO客户端:
npm start这将启动与Unity通信并使用AILogger进行持久化的MCP STDIO客户端。
注意:确保AILogger正在运行http://localhost:3030或者将AI_LOGGER_URL环境变量设置为指向AILogger实例。
- 运行测试:
# Run all tests
npm test
# Run only unit tests
npm run test:unit
# Run only e2e tests
npm run test:e2e
# Run tests with a specific pattern
npm test -- --testNamePattern="should return the server manifest"
npm run test:unit -- --testNamePattern="should return the server manifest"
npm run test:e2e -- --testNamePattern="should discover the test server"有关更多详细说明,请参阅 安装指南.
连接到AI助手
要将Unity MCP桥连接到AI助手,您需要创建一个MCP配置文件:
{
"mcpServers": {
"unity-ai-bridge": {
"url": "http://localhost:8080/sse"
}
}
}将此文件放置在您的AI助手的适当位置。对于Claude来说,这通常位于Claude Desktop应用程序的配置目录中。
可用工具
Unity MCP桥提供以下工具:
- execute_code:直接在Unity中执行C#代码。
- 怎么翻译:使用点符号执行查询以访问对象、属性和方法。
- get_logs:从AILogger检索日志。
- get_log_by_name:从AILogger检索特定日志。
使用示例
在Unity中执行代码
您可以使用以下命令在Unity中执行C#代码 execute_code 工具。代码将在Unity运行时环境中执行,结果将存储在AILogger中以供以后检索。
JSON-RPC请求
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "execute_code",
"arguments": {
"code": "Debug.Log(\"Hello from Unity!\"); return GameObject.FindObjectsOfType().Length;",
"timeout": 5000
}
}
}JSON-RPC响应
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"status\":\"success\",\"logName\":\"unity-execute-1712534400000\",\"result\":{\"success\":true,\"result\":42,\"logs\":[\"Hello from Unity!\"],\"executionTime\":123}}"
}
]
}
}查询Unity对象
您可以使用以下命令查询Unity对象 query 工具。这允许您使用点符号访问对象、属性和方法。
JSON-RPC请求
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "query",
"arguments": {
"query": "Camera.main.transform.position",
"timeout": 5000
}
}
}JSON-RPC响应
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [
{
"type": "text",
"text": "{\"status\":\"success\",\"logName\":\"unity-query-1712534400000\",\"result\":{\"success\":true,\"result\":{\"x\":0,\"y\":1,\"z\":-10},\"executionTime\":45}}"
}
]
}
}从AILogger检索结果
您可以使用AILogger检索以前操作的结果 get_log_by_name 工具。
JSON-RPC请求
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "get_log_by_name",
"arguments": {
"log_name": "unity-execute-1712534400000",
"limit": 1
}
}
}JSON-RPC响应
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [
{
"type": "text",
"text": "{\"status\":\"success\",\"name\":\"unity-execute-1712534400000\",\"entries\":[{\"id\":\"123e4567-e89b-12d3-a456-426614174000\",\"name\":\"unity-execute-1712534400000\",\"data\":{\"result\":{\"success\":true,\"result\":42,\"logs\":[\"Hello from Unity!\"],\"executionTime\":123},\"timestamp\":\"2025-04-08T00:00:00.000Z\"},\"timestamp\":\"2025-04-08T00:00:00.000Z\"}]}"
}
]
}
}示例用法
一旦AI助手可以访问Unity工具,您可以要求它执行以下任务:
Can you execute the following C# code in Unity?
GameObject.Find("Player").transform.position = new Vector3(0, 1, 0);许可证
麻省理工学院
作者
T 萨沃@TSavo)
