{
  "schemaVersion": "1.0",
  "item": {
    "slug": "openclaw-unity-skill",
    "name": "Unity Skill",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/TomLeeLive/openclaw-unity-skill",
    "canonicalUrl": "https://clawhub.ai/TomLeeLive/openclaw-unity-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/openclaw-unity-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=openclaw-unity-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "LICENSE.md",
      "README.md",
      "SKILL.md",
      "scripts/install-extension.sh",
      "references/tools.md",
      "extension/index.ts"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/openclaw-unity-skill"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/openclaw-unity-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/openclaw-unity-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/openclaw-unity-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/openclaw-unity-skill/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Unity Plugin Skill",
        "body": "Control Unity Editor through ~100 built-in tools. Works in both Editor and Play mode."
      },
      {
        "title": "1. OpenClaw Gateway (Remote)",
        "body": "For Telegram, Discord, and other OpenClaw channels:\n\nAuto-connects when Unity opens\nConfigure in: Window → OpenClaw Plugin → Settings"
      },
      {
        "title": "2. MCP Bridge (Local)",
        "body": "For Claude Code, Cursor, and local AI tools:\n\nStart: Window → OpenClaw Plugin → MCP Bridge → Start\nDefault port: 27182\nAdd to Claude Code: claude mcp add unity -- node <path>/MCP~/index.js"
      },
      {
        "title": "First-Time Setup",
        "body": "If unity_execute tool is not available, install the gateway extension:\n\n# From skill directory\n./scripts/install-extension.sh\n\n# Restart gateway\nopenclaw gateway restart\n\nThe extension files are in extension/ directory."
      },
      {
        "title": "What install-extension.sh Does",
        "body": "# 1. Copies extension files from skill to gateway\n#    Source: <skill>/extension/\n#    Destination: ~/.openclaw/extensions/unity/\n\n# 2. Files installed:\n#    - index.ts     # Extension entry point (HTTP handlers, tools)\n#    - package.json # Extension metadata\n\n# After installation, restart gateway to load the extension."
      },
      {
        "title": "🔐 Security",
        "body": "이 스킬은 disableModelInvocation: true로 설정되어 있습니다.\n\nAI가 자동으로 도구를 호출하지 않음\n사용자가 명시적으로 요청한 작업만 실행\n\n설정 변경 방법은 README.md를 참조하세요."
      },
      {
        "title": "Core Tools",
        "body": "CategoryKey ToolsScenescene.getActive, scene.getData, scene.load, scene.open, scene.saveGameObjectgameobject.find, gameobject.getAll, gameobject.create, gameobject.destroyComponentcomponent.get, component.set, component.add, component.removeTransformtransform.setPosition, transform.setRotation, transform.setScaleDebugdebug.hierarchy, debug.screenshot, console.getLogsInputinput.clickUI, input.type, input.keyPress, input.mouseClickEditoreditor.getState, editor.play, editor.stop, editor.refreshMaterialmaterial.create, material.assign, material.modify, material.getInfoPrefabprefab.create, prefab.instantiate, prefab.open, prefab.saveAssetasset.find, asset.copy, asset.move, asset.deletePackagepackage.add, package.remove, package.list, package.searchTesttest.run, test.list, test.getResults"
      },
      {
        "title": "1. Scene Inspection",
        "body": "unity_execute: debug.hierarchy {depth: 2}\nunity_execute: scene.getActive"
      },
      {
        "title": "2. Find & Modify Objects",
        "body": "unity_execute: gameobject.find {name: \"Player\"}\nunity_execute: component.get {name: \"Player\", componentType: \"Transform\"}\nunity_execute: transform.setPosition {name: \"Player\", x: 0, y: 5, z: 0}"
      },
      {
        "title": "3. UI Testing",
        "body": "unity_execute: input.clickUI {name: \"PlayButton\"}\nunity_execute: input.type {text: \"TestUser\", elementName: \"UsernameInput\"}\nunity_execute: debug.screenshot"
      },
      {
        "title": "4. Play Mode Control",
        "body": "unity_execute: editor.play              # Enter Play mode\nunity_execute: editor.stop              # Exit Play mode\nunity_execute: editor.getState          # Check current state\nunity_execute: editor.pause             # Pause\nunity_execute: editor.unpause           # Resume"
      },
      {
        "title": "5. Material Creation",
        "body": "unity_execute: material.create {name: \"RedMetal\", color: \"#FF0000\", metallic: 0.8}\nunity_execute: material.assign {gameObjectName: \"Player\", materialPath: \"Assets/Materials/RedMetal.mat\"}\nunity_execute: material.modify {path: \"Assets/Materials/RedMetal.mat\", metallic: 1.0, emission: \"#FF4444\"}"
      },
      {
        "title": "6. Prefab Workflow",
        "body": "unity_execute: prefab.create {gameObjectName: \"Player\", path: \"Assets/Prefabs/Player.prefab\"}\nunity_execute: prefab.instantiate {prefabPath: \"Assets/Prefabs/Player.prefab\", x: 0, y: 1, z: 0}\nunity_execute: prefab.open {path: \"Assets/Prefabs/Player.prefab\"}\nunity_execute: prefab.save\nunity_execute: prefab.close"
      },
      {
        "title": "7. Asset Management",
        "body": "unity_execute: asset.find {query: \"Player\", type: \"Prefab\"}\nunity_execute: asset.copy {sourcePath: \"Assets/Prefabs/Player.prefab\", destPath: \"Assets/Backup/Player.prefab\"}\nunity_execute: asset.move {sourcePath: \"Assets/Old/Item.prefab\", destPath: \"Assets/New/Item.prefab\"}"
      },
      {
        "title": "8. Package Management",
        "body": "unity_execute: package.list\nunity_execute: package.search {query: \"TextMeshPro\"}\nunity_execute: package.add {packageName: \"com.unity.textmeshpro\"}\nunity_execute: package.add {gitUrl: \"https://github.com/example/package.git\"}"
      },
      {
        "title": "9. Test Running",
        "body": "unity_execute: test.list {testMode: \"EditMode\"}\nunity_execute: test.run {testMode: \"EditMode\", filter: \"PlayerTests\"}\nunity_execute: test.getResults"
      },
      {
        "title": "10. Script Execution (Enhanced)",
        "body": "# Debug logging\nunity_execute: script.execute {code: \"Debug.Log('Hello')\"}\n\n# Time manipulation\nunity_execute: script.execute {code: \"Time.timeScale = 0.5\"}\n\n# PlayerPrefs\nunity_execute: script.execute {code: \"PlayerPrefs.SetInt('score', 100)\"}\n\n# Reflection-based method calls\nunity_execute: script.execute {code: \"MyClass.MyMethod()\"}\nunity_execute: script.execute {code: \"MyClass.MyStaticMethod('param1', 123)\"}"
      },
      {
        "title": "Console (3 tools)",
        "body": "console.getLogs - Get logs with optional type filter (Log/Warning/Error)\nconsole.getErrors - Get error/exception logs (with optional warnings)\nconsole.clear - Clear captured logs"
      },
      {
        "title": "Scene (7 tools)",
        "body": "scene.list - List scenes in build settings\nscene.getActive - Get active scene info\nscene.getData - Get full hierarchy data\nscene.load - Load scene by name (Play mode)\nscene.open - Open scene in Editor mode\nscene.save - Save active scene (Editor mode)\nscene.saveAll - Save all open scenes (Editor mode)"
      },
      {
        "title": "GameObject (8 tools)",
        "body": "gameobject.find - Find by name, tag, or component\ngameobject.getAll - Get all GameObjects with filtering\ngameobject.create - Create object or primitive (Cube, Sphere, etc.)\ngameobject.destroy - Destroy object\ngameobject.delete - Delete object (alias for destroy)\ngameobject.getData - Get detailed data\ngameobject.setActive - Enable/disable\ngameobject.setParent - Change hierarchy"
      },
      {
        "title": "Transform (6 tools)",
        "body": "transform.getPosition - Get world position {x, y, z}\ntransform.getRotation - Get Euler rotation {x, y, z}\ntransform.getScale - Get local scale {x, y, z}\ntransform.setPosition - Set world position {x, y, z}\ntransform.setRotation - Set Euler rotation\ntransform.setScale - Set local scale"
      },
      {
        "title": "Component (5 tools)",
        "body": "component.add - Add component by type name\ncomponent.remove - Remove component\ncomponent.get - Get component data/properties\ncomponent.set - Set field/property value\ncomponent.list - List available component types"
      },
      {
        "title": "Script (3 tools)",
        "body": "script.execute - Execute code: Debug.Log, Time, PlayerPrefs, reflection calls\nscript.read - Read script file\nscript.list - List project scripts"
      },
      {
        "title": "Application (4 tools)",
        "body": "app.getState - Get play mode, FPS, time\napp.play - Enter/exit Play mode\napp.pause - Toggle pause\napp.stop - Stop Play mode"
      },
      {
        "title": "Debug (3 tools)",
        "body": "debug.log - Write to console\ndebug.screenshot - Capture screenshot\ndebug.hierarchy - Text hierarchy view"
      },
      {
        "title": "Editor (9 tools)",
        "body": "editor.refresh - Refresh AssetDatabase (triggers recompile)\neditor.recompile - Request script recompilation\neditor.domainReload - Force domain reload\neditor.focusWindow - Focus window (game/scene/console/hierarchy/project/inspector)\neditor.listWindows - List open windows\neditor.getState - Get editor state\neditor.play - Enter Play mode\neditor.stop - Exit Play mode\neditor.pause / editor.unpause - Pause control"
      },
      {
        "title": "Input Simulation (10 tools)",
        "body": "input.keyPress - Press and release key\ninput.keyDown / input.keyUp - Hold/release key\ninput.type - Type text into field\ninput.mouseMove - Move cursor\ninput.mouseClick - Click at position\ninput.mouseDrag - Drag operation\ninput.mouseScroll - Scroll wheel\ninput.getMousePosition - Get cursor position\ninput.clickUI - Click UI element by name"
      },
      {
        "title": "Material (5 tools) - NEW in v1.5.0",
        "body": "material.create - Create material with shader, color, metallic, smoothness\nmaterial.assign - Assign material to GameObject\nmaterial.modify - Modify material properties (color, metallic, emission)\nmaterial.getInfo - Get detailed material info with all shader properties\nmaterial.list - List materials in project with filtering"
      },
      {
        "title": "Prefab (5 tools) - NEW in v1.5.0",
        "body": "prefab.create - Create prefab from scene GameObject\nprefab.instantiate - Instantiate prefab in scene with position\nprefab.open - Open prefab for editing\nprefab.close - Close prefab editing mode\nprefab.save - Save currently edited prefab"
      },
      {
        "title": "Asset (7 tools) - NEW in v1.5.0",
        "body": "asset.find - Search assets by query, type, folder\nasset.copy - Copy asset to new path\nasset.move - Move/rename asset\nasset.delete - Delete asset (with trash option)\nasset.refresh - Refresh AssetDatabase\nasset.import - Import/reimport specific asset\nasset.getPath - Get asset path by name"
      },
      {
        "title": "Package Manager (4 tools) - NEW in v1.5.0",
        "body": "package.add - Install package by name or git URL\npackage.remove - Remove installed package\npackage.list - List installed packages\npackage.search - Search Unity package registry"
      },
      {
        "title": "Test Runner (3 tools) - NEW in v1.5.0",
        "body": "test.run - Run EditMode/PlayMode tests with filtering\ntest.list - List available tests\ntest.getResults - Get last test run results"
      },
      {
        "title": "Batch Execution (1 tool) - NEW in v1.6.0",
        "body": "batch.execute - Execute multiple tools in one call (10-100x performance)\n\ncommands: Array of {tool, params} objects\nstopOnError: Stop on first error (default: false)"
      },
      {
        "title": "Session (1 tool) - NEW in v1.6.0",
        "body": "session.getInfo - Get session info (project, processId, machineName, sessionId)"
      },
      {
        "title": "ScriptableObject (6 tools) - NEW in v1.6.0",
        "body": "scriptableobject.create - Create new ScriptableObject asset\nscriptableobject.load - Load and inspect ScriptableObject fields\nscriptableobject.save - Save ScriptableObject changes\nscriptableobject.getField - Get specific field value\nscriptableobject.setField - Set field value with auto-save\nscriptableobject.list - List ScriptableObjects in project"
      },
      {
        "title": "Shader (3 tools) - NEW in v1.6.0",
        "body": "shader.list - List shaders in project\nshader.getInfo - Get shader properties and info\nshader.getKeywords - Get shader keywords"
      },
      {
        "title": "Texture (5 tools) - NEW in v1.6.0",
        "body": "texture.create - Create new texture with color fill\ntexture.getInfo - Get texture info (size, format, import settings)\ntexture.setPixels - Fill region with color\ntexture.resize - Resize texture via import settings\ntexture.list - List textures in project"
      },
      {
        "title": "Custom Tools API - v1.6.0",
        "body": "Register project-specific tools:\n\nOpenClawCustomTools.Register(\n    \"mygame.getScore\",\n    \"Get current score\",\n    (args) => new { success = true, score = GameManager.Score }\n);"
      },
      {
        "title": "MCP Resources - v1.6.0",
        "body": "Access Unity data via MCP resource URIs:\n\nURIDescriptionunity://scene/hierarchyScene hierarchyunity://scene/activeActive scene infounity://project/scriptsScript listunity://project/scenesScene listunity://editor/stateEditor stateunity://console/logsConsole logsunity://session/infoSession info"
      },
      {
        "title": "Screenshot Modes",
        "body": "Play mode: ScreenCapture - includes all UI overlays\nEditor mode: Camera.main.Render() - no overlay UI\nUse {method: \"camera\"} for camera-only capture"
      },
      {
        "title": "Finding Objects",
        "body": "gameobject.find {name: \"Player\"}           # By exact name\ngameobject.find {tag: \"Enemy\"}             # By tag\ngameobject.find {componentType: \"Camera\"}  # By component\ngameobject.getAll {activeOnly: true}       # All active objects"
      },
      {
        "title": "Script Recompilation",
        "body": "Unity may not auto-recompile after code changes. Use:\n\neditor.refresh    # Full asset refresh + recompile"
      },
      {
        "title": "Play Mode Transitions",
        "body": "Plugin survives Play mode transitions via SessionState\nIf connection lost, wait for auto-reconnect or use Window → OpenClaw Plugin → Settings → Connect"
      },
      {
        "title": "MCP Bridge Usage",
        "body": "For Claude Code / Cursor integration:\n\nStart: Window → OpenClaw Plugin → MCP Bridge → Start\nRegister: claude mcp add unity -- node /path/to/MCP~/index.js\nVerify: curl http://127.0.0.1:27182/status"
      },
      {
        "title": "Input Simulation Limitation",
        "body": "Keyboard/mouse simulation works for UI interactions but NOT for Input.GetKey(). For gameplay testing:\n\nUse transform.setPosition to move objects directly\nOr migrate to Unity's new Input System"
      },
      {
        "title": "Troubleshooting",
        "body": "IssueSolutionTool timeoutCheck Unity is responding, try editor.getStateGateway no connectionCheck Window → OpenClaw Plugin → SettingsMCP no connectionStart MCP Bridge, verify port 27182Scripts not updatingUse editor.refresh to force recompileWrong screenshotUse Play mode for game view with UIMCP 504 timeoutUnity busy or MCP Bridge not startedTest Runner not foundInstall com.unity.test-framework package"
      },
      {
        "title": "Links",
        "body": "Skill Repository: https://github.com/TomLeeLive/openclaw-unity-skill\nPlugin Repository: https://github.com/TomLeeLive/openclaw-unity-plugin\nOpenClaw Docs: https://docs.openclaw.ai\nMCP Setup Guide: See Plugin Repository → Documentation~/SETUP_GUIDE.md"
      },
      {
        "title": "License",
        "body": "MIT License - See LICENSE file"
      }
    ],
    "body": "Unity Plugin Skill\n\nControl Unity Editor through ~100 built-in tools. Works in both Editor and Play mode.\n\nConnection Modes\n1. OpenClaw Gateway (Remote)\n\nFor Telegram, Discord, and other OpenClaw channels:\n\nAuto-connects when Unity opens\nConfigure in: Window → OpenClaw Plugin → Settings\n2. MCP Bridge (Local)\n\nFor Claude Code, Cursor, and local AI tools:\n\nStart: Window → OpenClaw Plugin → MCP Bridge → Start\nDefault port: 27182\nAdd to Claude Code: claude mcp add unity -- node <path>/MCP~/index.js\nFirst-Time Setup\n\nIf unity_execute tool is not available, install the gateway extension:\n\n# From skill directory\n./scripts/install-extension.sh\n\n# Restart gateway\nopenclaw gateway restart\n\n\nThe extension files are in extension/ directory.\n\nWhat install-extension.sh Does\n# 1. Copies extension files from skill to gateway\n#    Source: <skill>/extension/\n#    Destination: ~/.openclaw/extensions/unity/\n\n# 2. Files installed:\n#    - index.ts     # Extension entry point (HTTP handlers, tools)\n#    - package.json # Extension metadata\n\n# After installation, restart gateway to load the extension.\n\n🔐 Security\n\n이 스킬은 disableModelInvocation: true로 설정되어 있습니다.\n\nAI가 자동으로 도구를 호출하지 않음\n사용자가 명시적으로 요청한 작업만 실행\n\n설정 변경 방법은 README.md를 참조하세요.\n\nQuick Reference\nCore Tools\nCategory\tKey Tools\nScene\tscene.getActive, scene.getData, scene.load, scene.open, scene.save\nGameObject\tgameobject.find, gameobject.getAll, gameobject.create, gameobject.destroy\nComponent\tcomponent.get, component.set, component.add, component.remove\nTransform\ttransform.setPosition, transform.setRotation, transform.setScale\nDebug\tdebug.hierarchy, debug.screenshot, console.getLogs\nInput\tinput.clickUI, input.type, input.keyPress, input.mouseClick\nEditor\teditor.getState, editor.play, editor.stop, editor.refresh\nMaterial\tmaterial.create, material.assign, material.modify, material.getInfo\nPrefab\tprefab.create, prefab.instantiate, prefab.open, prefab.save\nAsset\tasset.find, asset.copy, asset.move, asset.delete\nPackage\tpackage.add, package.remove, package.list, package.search\nTest\ttest.run, test.list, test.getResults\nCommon Workflows\n1. Scene Inspection\nunity_execute: debug.hierarchy {depth: 2}\nunity_execute: scene.getActive\n\n2. Find & Modify Objects\nunity_execute: gameobject.find {name: \"Player\"}\nunity_execute: component.get {name: \"Player\", componentType: \"Transform\"}\nunity_execute: transform.setPosition {name: \"Player\", x: 0, y: 5, z: 0}\n\n3. UI Testing\nunity_execute: input.clickUI {name: \"PlayButton\"}\nunity_execute: input.type {text: \"TestUser\", elementName: \"UsernameInput\"}\nunity_execute: debug.screenshot\n\n4. Play Mode Control\nunity_execute: editor.play              # Enter Play mode\nunity_execute: editor.stop              # Exit Play mode\nunity_execute: editor.getState          # Check current state\nunity_execute: editor.pause             # Pause\nunity_execute: editor.unpause           # Resume\n\n5. Material Creation\nunity_execute: material.create {name: \"RedMetal\", color: \"#FF0000\", metallic: 0.8}\nunity_execute: material.assign {gameObjectName: \"Player\", materialPath: \"Assets/Materials/RedMetal.mat\"}\nunity_execute: material.modify {path: \"Assets/Materials/RedMetal.mat\", metallic: 1.0, emission: \"#FF4444\"}\n\n6. Prefab Workflow\nunity_execute: prefab.create {gameObjectName: \"Player\", path: \"Assets/Prefabs/Player.prefab\"}\nunity_execute: prefab.instantiate {prefabPath: \"Assets/Prefabs/Player.prefab\", x: 0, y: 1, z: 0}\nunity_execute: prefab.open {path: \"Assets/Prefabs/Player.prefab\"}\nunity_execute: prefab.save\nunity_execute: prefab.close\n\n7. Asset Management\nunity_execute: asset.find {query: \"Player\", type: \"Prefab\"}\nunity_execute: asset.copy {sourcePath: \"Assets/Prefabs/Player.prefab\", destPath: \"Assets/Backup/Player.prefab\"}\nunity_execute: asset.move {sourcePath: \"Assets/Old/Item.prefab\", destPath: \"Assets/New/Item.prefab\"}\n\n8. Package Management\nunity_execute: package.list\nunity_execute: package.search {query: \"TextMeshPro\"}\nunity_execute: package.add {packageName: \"com.unity.textmeshpro\"}\nunity_execute: package.add {gitUrl: \"https://github.com/example/package.git\"}\n\n9. Test Running\nunity_execute: test.list {testMode: \"EditMode\"}\nunity_execute: test.run {testMode: \"EditMode\", filter: \"PlayerTests\"}\nunity_execute: test.getResults\n\n10. Script Execution (Enhanced)\n# Debug logging\nunity_execute: script.execute {code: \"Debug.Log('Hello')\"}\n\n# Time manipulation\nunity_execute: script.execute {code: \"Time.timeScale = 0.5\"}\n\n# PlayerPrefs\nunity_execute: script.execute {code: \"PlayerPrefs.SetInt('score', 100)\"}\n\n# Reflection-based method calls\nunity_execute: script.execute {code: \"MyClass.MyMethod()\"}\nunity_execute: script.execute {code: \"MyClass.MyStaticMethod('param1', 123)\"}\n\nTool Categories (~100 tools)\nConsole (3 tools)\nconsole.getLogs - Get logs with optional type filter (Log/Warning/Error)\nconsole.getErrors - Get error/exception logs (with optional warnings)\nconsole.clear - Clear captured logs\nScene (7 tools)\nscene.list - List scenes in build settings\nscene.getActive - Get active scene info\nscene.getData - Get full hierarchy data\nscene.load - Load scene by name (Play mode)\nscene.open - Open scene in Editor mode\nscene.save - Save active scene (Editor mode)\nscene.saveAll - Save all open scenes (Editor mode)\nGameObject (8 tools)\ngameobject.find - Find by name, tag, or component\ngameobject.getAll - Get all GameObjects with filtering\ngameobject.create - Create object or primitive (Cube, Sphere, etc.)\ngameobject.destroy - Destroy object\ngameobject.delete - Delete object (alias for destroy)\ngameobject.getData - Get detailed data\ngameobject.setActive - Enable/disable\ngameobject.setParent - Change hierarchy\nTransform (6 tools)\ntransform.getPosition - Get world position {x, y, z}\ntransform.getRotation - Get Euler rotation {x, y, z}\ntransform.getScale - Get local scale {x, y, z}\ntransform.setPosition - Set world position {x, y, z}\ntransform.setRotation - Set Euler rotation\ntransform.setScale - Set local scale\nComponent (5 tools)\ncomponent.add - Add component by type name\ncomponent.remove - Remove component\ncomponent.get - Get component data/properties\ncomponent.set - Set field/property value\ncomponent.list - List available component types\nScript (3 tools)\nscript.execute - Execute code: Debug.Log, Time, PlayerPrefs, reflection calls\nscript.read - Read script file\nscript.list - List project scripts\nApplication (4 tools)\napp.getState - Get play mode, FPS, time\napp.play - Enter/exit Play mode\napp.pause - Toggle pause\napp.stop - Stop Play mode\nDebug (3 tools)\ndebug.log - Write to console\ndebug.screenshot - Capture screenshot\ndebug.hierarchy - Text hierarchy view\nEditor (9 tools)\neditor.refresh - Refresh AssetDatabase (triggers recompile)\neditor.recompile - Request script recompilation\neditor.domainReload - Force domain reload\neditor.focusWindow - Focus window (game/scene/console/hierarchy/project/inspector)\neditor.listWindows - List open windows\neditor.getState - Get editor state\neditor.play - Enter Play mode\neditor.stop - Exit Play mode\neditor.pause / editor.unpause - Pause control\nInput Simulation (10 tools)\ninput.keyPress - Press and release key\ninput.keyDown / input.keyUp - Hold/release key\ninput.type - Type text into field\ninput.mouseMove - Move cursor\ninput.mouseClick - Click at position\ninput.mouseDrag - Drag operation\ninput.mouseScroll - Scroll wheel\ninput.getMousePosition - Get cursor position\ninput.clickUI - Click UI element by name\nMaterial (5 tools) - NEW in v1.5.0\nmaterial.create - Create material with shader, color, metallic, smoothness\nmaterial.assign - Assign material to GameObject\nmaterial.modify - Modify material properties (color, metallic, emission)\nmaterial.getInfo - Get detailed material info with all shader properties\nmaterial.list - List materials in project with filtering\nPrefab (5 tools) - NEW in v1.5.0\nprefab.create - Create prefab from scene GameObject\nprefab.instantiate - Instantiate prefab in scene with position\nprefab.open - Open prefab for editing\nprefab.close - Close prefab editing mode\nprefab.save - Save currently edited prefab\nAsset (7 tools) - NEW in v1.5.0\nasset.find - Search assets by query, type, folder\nasset.copy - Copy asset to new path\nasset.move - Move/rename asset\nasset.delete - Delete asset (with trash option)\nasset.refresh - Refresh AssetDatabase\nasset.import - Import/reimport specific asset\nasset.getPath - Get asset path by name\nPackage Manager (4 tools) - NEW in v1.5.0\npackage.add - Install package by name or git URL\npackage.remove - Remove installed package\npackage.list - List installed packages\npackage.search - Search Unity package registry\nTest Runner (3 tools) - NEW in v1.5.0\ntest.run - Run EditMode/PlayMode tests with filtering\ntest.list - List available tests\ntest.getResults - Get last test run results\nBatch Execution (1 tool) - NEW in v1.6.0\nbatch.execute - Execute multiple tools in one call (10-100x performance)\ncommands: Array of {tool, params} objects\nstopOnError: Stop on first error (default: false)\nSession (1 tool) - NEW in v1.6.0\nsession.getInfo - Get session info (project, processId, machineName, sessionId)\nScriptableObject (6 tools) - NEW in v1.6.0\nscriptableobject.create - Create new ScriptableObject asset\nscriptableobject.load - Load and inspect ScriptableObject fields\nscriptableobject.save - Save ScriptableObject changes\nscriptableobject.getField - Get specific field value\nscriptableobject.setField - Set field value with auto-save\nscriptableobject.list - List ScriptableObjects in project\nShader (3 tools) - NEW in v1.6.0\nshader.list - List shaders in project\nshader.getInfo - Get shader properties and info\nshader.getKeywords - Get shader keywords\nTexture (5 tools) - NEW in v1.6.0\ntexture.create - Create new texture with color fill\ntexture.getInfo - Get texture info (size, format, import settings)\ntexture.setPixels - Fill region with color\ntexture.resize - Resize texture via import settings\ntexture.list - List textures in project\nCustom Tools API - v1.6.0\n\nRegister project-specific tools:\n\nOpenClawCustomTools.Register(\n    \"mygame.getScore\",\n    \"Get current score\",\n    (args) => new { success = true, score = GameManager.Score }\n);\n\nMCP Resources - v1.6.0\n\nAccess Unity data via MCP resource URIs:\n\nURI\tDescription\nunity://scene/hierarchy\tScene hierarchy\nunity://scene/active\tActive scene info\nunity://project/scripts\tScript list\nunity://project/scenes\tScene list\nunity://editor/state\tEditor state\nunity://console/logs\tConsole logs\nunity://session/info\tSession info\nTips\nScreenshot Modes\nPlay mode: ScreenCapture - includes all UI overlays\nEditor mode: Camera.main.Render() - no overlay UI\nUse {method: \"camera\"} for camera-only capture\nFinding Objects\ngameobject.find {name: \"Player\"}           # By exact name\ngameobject.find {tag: \"Enemy\"}             # By tag\ngameobject.find {componentType: \"Camera\"}  # By component\ngameobject.getAll {activeOnly: true}       # All active objects\n\nScript Recompilation\n\nUnity may not auto-recompile after code changes. Use:\n\neditor.refresh    # Full asset refresh + recompile\n\nPlay Mode Transitions\nPlugin survives Play mode transitions via SessionState\nIf connection lost, wait for auto-reconnect or use Window → OpenClaw Plugin → Settings → Connect\nMCP Bridge Usage\n\nFor Claude Code / Cursor integration:\n\nStart: Window → OpenClaw Plugin → MCP Bridge → Start\nRegister: claude mcp add unity -- node /path/to/MCP~/index.js\nVerify: curl http://127.0.0.1:27182/status\nInput Simulation Limitation\n\nKeyboard/mouse simulation works for UI interactions but NOT for Input.GetKey(). For gameplay testing:\n\nUse transform.setPosition to move objects directly\nOr migrate to Unity's new Input System\nTroubleshooting\nIssue\tSolution\nTool timeout\tCheck Unity is responding, try editor.getState\nGateway no connection\tCheck Window → OpenClaw Plugin → Settings\nMCP no connection\tStart MCP Bridge, verify port 27182\nScripts not updating\tUse editor.refresh to force recompile\nWrong screenshot\tUse Play mode for game view with UI\nMCP 504 timeout\tUnity busy or MCP Bridge not started\nTest Runner not found\tInstall com.unity.test-framework package\nLinks\nSkill Repository: https://github.com/TomLeeLive/openclaw-unity-skill\nPlugin Repository: https://github.com/TomLeeLive/openclaw-unity-plugin\nOpenClaw Docs: https://docs.openclaw.ai\nMCP Setup Guide: See Plugin Repository → Documentation~/SETUP_GUIDE.md\nLicense\n\nMIT License - See LICENSE file"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/TomLeeLive/openclaw-unity-skill",
    "publisherUrl": "https://clawhub.ai/TomLeeLive/openclaw-unity-skill",
    "owner": "TomLeeLive",
    "version": "1.6.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/openclaw-unity-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/openclaw-unity-skill",
    "agentUrl": "https://openagent3.xyz/skills/openclaw-unity-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/openclaw-unity-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/openclaw-unity-skill/agent.md"
  }
}