Unity与AI助手之间使用模型上下文协议(MCP)的桥梁。
Unity-MCP是Unity游戏开发中Model Context Protocol的一个开源实现。它使AI助手能够通过标准化接口与Unity游戏环境进行交互,支持AI辅助的游戏开发、自动化测试、场景分析和运行时调试。
架构已简化为使用AILogger进行持久化,无需单独的服务器组件:
AI助手 <-> Unity-MCP STDIO客户端 <-> Unity客户端 <-> AILogger
Unity-MCP STDIO客户端直接与Unity客户端通信,提供代码执行和查询的端点。查询工具通过将其包装在一个return语句中,将查询转换为代码执行。
要开始使用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实例。
运行测试:
# 运行所有测试
npm test
# 只运行单元测试
npm run test:unit
# 只运行端到端测试
npm run test:e2e
# 使用特定模式运行测试
npm test -- --testNamePattern="应返回服务器清单"
npm run test:unit -- --testNamePattern="应返回服务器清单"
npm run test:e2e -- --testNamePattern="应发现测试服务器"
更多详细说明,请参阅安装指南。
要将Unity-MCP桥连接到AI助手,您需要创建一个MCP配置文件:
{
"mcpServers": {
"unity-ai-bridge": {
"url": "http://localhost:8080/sse"
}
}
}
将此文件放置在您的AI助手的适当位置。对于Claude,这通常是在Claude桌面应用的配置目录中。
Unity-MCP桥提供了以下工具:
您可以使用execute_code工具在Unity中执行C#代码。该代码将在Unity运行时环境中执行,结果将存储在AILogger中以供后续检索。
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "execute_code",
"arguments": {
"code": "Debug.Log(\"来自Unity的问候!\"); return GameObject.FindObjectsOfType<GameObject>().Length;",
"timeout": 5000
}
}
}
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"status\":\"success\",\"logName\":\"unity-execute-1712534400000\",\"result\":{\"success\":true,\"result\":42,\"logs\":[\"来自Unity的问候!\"],\"executionTime\":123}}"
}
]
}
}
您可以使用query工具查询Unity对象。这允许您使用点表示法访问对象、属性和方法。
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "query",
"arguments": {
"query": "Camera.main.transform.position",
"timeout": 5000
}
}
}
{
"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}}"
}
]
}
}
您可以使用get_log_by_name工具从AILogger检索先前操作的结果。
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "get_log_by_name",
"arguments": {
"log_name": "unity-execute-1712534400000",
"limit": 1
}
}
}
{
"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\":[\"来自Unity的问候!\"],\"executionTime\":123},\"timestamp\":\"2025-04-08T00:00:00.000Z\"},\"timestamp\":\"2025-04-08T00:00:00.000Z\"}]}"
}
]
}
}
一旦AI助手可以访问Unity工具,您可以要求它执行任务,如:
你能在Unity中执行以下C#代码吗?
GameObject.Find("玩家").transform.position = new Vector3(0, 1, 0);
MIT
T Savo (@TSavo)