openclaw-unity-skillControl Unity Editor via OpenClaw Unity Plugin. Use for Unity game development tasks including scene management, GameObject/Component manipulation, debugging, input simulation, and Play mode control. Triggers on Unity-related requests like inspecting scenes, creating objects, taking screenshots, testing gameplay, or controlling the Editor.
Install via ClawdBot CLI:
clawdbot install TomLeeLive/openclaw-unity-skillControl Unity Editor through ~100 built-in tools. Works in both Editor and Play mode.
For Telegram, Discord, and other OpenClaw channels:
For Claude Code, Cursor, and local AI tools:
claude mcp add unity -- node /MCP~/index.js If unity_execute tool is not available, install the gateway extension:
# From skill directory
./scripts/install-extension.sh
# Restart gateway
openclaw gateway restart
The extension files are in extension/ directory.
# 1. Copies extension files from skill to gateway
# Source: <skill>/extension/
# Destination: ~/.openclaw/extensions/unity/
# 2. Files installed:
# - index.ts # Extension entry point (HTTP handlers, tools)
# - package.json # Extension metadata
# After installation, restart gateway to load the extension.
이 스킬은 disableModelInvocation: true로 설정되어 있습니다.
설정 변경 방법은 README.md를 참조하세요.
| Category | Key Tools |
|----------|-----------|
| Scene | scene.getActive, scene.getData, scene.load, scene.open, scene.save |
| GameObject | gameobject.find, gameobject.getAll, gameobject.create, gameobject.destroy |
| Component | component.get, component.set, component.add, component.remove |
| Transform | transform.setPosition, transform.setRotation, transform.setScale |
| Debug | debug.hierarchy, debug.screenshot, console.getLogs |
| Input | input.clickUI, input.type, input.keyPress, input.mouseClick |
| Editor | editor.getState, editor.play, editor.stop, editor.refresh |
| Material | material.create, material.assign, material.modify, material.getInfo |
| Prefab | prefab.create, prefab.instantiate, prefab.open, prefab.save |
| Asset | asset.find, asset.copy, asset.move, asset.delete |
| Package | package.add, package.remove, package.list, package.search |
| Test | test.run, test.list, test.getResults |
unity_execute: debug.hierarchy {depth: 2}
unity_execute: scene.getActive
unity_execute: gameobject.find {name: "Player"}
unity_execute: component.get {name: "Player", componentType: "Transform"}
unity_execute: transform.setPosition {name: "Player", x: 0, y: 5, z: 0}
unity_execute: input.clickUI {name: "PlayButton"}
unity_execute: input.type {text: "TestUser", elementName: "UsernameInput"}
unity_execute: debug.screenshot
unity_execute: editor.play # Enter Play mode
unity_execute: editor.stop # Exit Play mode
unity_execute: editor.getState # Check current state
unity_execute: editor.pause # Pause
unity_execute: editor.unpause # Resume
unity_execute: material.create {name: "RedMetal", color: "#FF0000", metallic: 0.8}
unity_execute: material.assign {gameObjectName: "Player", materialPath: "Assets/Materials/RedMetal.mat"}
unity_execute: material.modify {path: "Assets/Materials/RedMetal.mat", metallic: 1.0, emission: "#FF4444"}
unity_execute: prefab.create {gameObjectName: "Player", path: "Assets/Prefabs/Player.prefab"}
unity_execute: prefab.instantiate {prefabPath: "Assets/Prefabs/Player.prefab", x: 0, y: 1, z: 0}
unity_execute: prefab.open {path: "Assets/Prefabs/Player.prefab"}
unity_execute: prefab.save
unity_execute: prefab.close
unity_execute: asset.find {query: "Player", type: "Prefab"}
unity_execute: asset.copy {sourcePath: "Assets/Prefabs/Player.prefab", destPath: "Assets/Backup/Player.prefab"}
unity_execute: asset.move {sourcePath: "Assets/Old/Item.prefab", destPath: "Assets/New/Item.prefab"}
unity_execute: package.list
unity_execute: package.search {query: "TextMeshPro"}
unity_execute: package.add {packageName: "com.unity.textmeshpro"}
unity_execute: package.add {gitUrl: "https://github.com/example/package.git"}
unity_execute: test.list {testMode: "EditMode"}
unity_execute: test.run {testMode: "EditMode", filter: "PlayerTests"}
unity_execute: test.getResults
# Debug logging
unity_execute: script.execute {code: "Debug.Log('Hello')"}
# Time manipulation
unity_execute: script.execute {code: "Time.timeScale = 0.5"}
# PlayerPrefs
unity_execute: script.execute {code: "PlayerPrefs.SetInt('score', 100)"}
# Reflection-based method calls
unity_execute: script.execute {code: "MyClass.MyMethod()"}
unity_execute: script.execute {code: "MyClass.MyStaticMethod('param1', 123)"}
console.getLogs - Get logs with optional type filter (Log/Warning/Error)console.getErrors - Get error/exception logs (with optional warnings)console.clear - Clear captured logsscene.list - List scenes in build settingsscene.getActive - Get active scene infoscene.getData - Get full hierarchy datascene.load - Load scene by name (Play mode)scene.open - Open scene in Editor modescene.save - Save active scene (Editor mode)scene.saveAll - Save all open scenes (Editor mode)gameobject.find - Find by name, tag, or componentgameobject.getAll - Get all GameObjects with filteringgameobject.create - Create object or primitive (Cube, Sphere, etc.)gameobject.destroy - Destroy objectgameobject.delete - Delete object (alias for destroy)gameobject.getData - Get detailed datagameobject.setActive - Enable/disablegameobject.setParent - Change hierarchytransform.getPosition - Get world position {x, y, z}transform.getRotation - Get Euler rotation {x, y, z}transform.getScale - Get local scale {x, y, z}transform.setPosition - Set world position {x, y, z}transform.setRotation - Set Euler rotationtransform.setScale - Set local scalecomponent.add - Add component by type namecomponent.remove - Remove componentcomponent.get - Get component data/propertiescomponent.set - Set field/property valuecomponent.list - List available component typesscript.execute - Execute code: Debug.Log, Time, PlayerPrefs, reflection callsscript.read - Read script filescript.list - List project scriptsapp.getState - Get play mode, FPS, timeapp.play - Enter/exit Play modeapp.pause - Toggle pauseapp.stop - Stop Play modedebug.log - Write to consoledebug.screenshot - Capture screenshotdebug.hierarchy - Text hierarchy vieweditor.refresh - Refresh AssetDatabase (triggers recompile)editor.recompile - Request script recompilationeditor.domainReload - Force domain reloadeditor.focusWindow - Focus window (game/scene/console/hierarchy/project/inspector)editor.listWindows - List open windowseditor.getState - Get editor stateeditor.play - Enter Play modeeditor.stop - Exit Play modeeditor.pause / editor.unpause - Pause controlinput.keyPress - Press and release keyinput.keyDown / input.keyUp - Hold/release keyinput.type - Type text into fieldinput.mouseMove - Move cursorinput.mouseClick - Click at positioninput.mouseDrag - Drag operationinput.mouseScroll - Scroll wheelinput.getMousePosition - Get cursor positioninput.clickUI - Click UI element by namematerial.create - Create material with shader, color, metallic, smoothnessmaterial.assign - Assign material to GameObjectmaterial.modify - Modify material properties (color, metallic, emission)material.getInfo - Get detailed material info with all shader propertiesmaterial.list - List materials in project with filteringprefab.create - Create prefab from scene GameObjectprefab.instantiate - Instantiate prefab in scene with positionprefab.open - Open prefab for editingprefab.close - Close prefab editing modeprefab.save - Save currently edited prefabasset.find - Search assets by query, type, folderasset.copy - Copy asset to new pathasset.move - Move/rename assetasset.delete - Delete asset (with trash option)asset.refresh - Refresh AssetDatabaseasset.import - Import/reimport specific assetasset.getPath - Get asset path by namepackage.add - Install package by name or git URLpackage.remove - Remove installed packagepackage.list - List installed packagespackage.search - Search Unity package registrytest.run - Run EditMode/PlayMode tests with filteringtest.list - List available teststest.getResults - Get last test run resultsbatch.execute - Execute multiple tools in one call (10-100x performance)commands: Array of {tool, params} objectsstopOnError: Stop on first error (default: false)session.getInfo - Get session info (project, processId, machineName, sessionId)scriptableobject.create - Create new ScriptableObject assetscriptableobject.load - Load and inspect ScriptableObject fieldsscriptableobject.save - Save ScriptableObject changesscriptableobject.getField - Get specific field valuescriptableobject.setField - Set field value with auto-savescriptableobject.list - List ScriptableObjects in projectshader.list - List shaders in projectshader.getInfo - Get shader properties and infoshader.getKeywords - Get shader keywordstexture.create - Create new texture with color filltexture.getInfo - Get texture info (size, format, import settings)texture.setPixels - Fill region with colortexture.resize - Resize texture via import settingstexture.list - List textures in projectRegister project-specific tools:
OpenClawCustomTools.Register(
"mygame.getScore",
"Get current score",
(args) => new { success = true, score = GameManager.Score }
);
Access Unity data via MCP resource URIs:
| URI | Description |
|-----|-------------|
| unity://scene/hierarchy | Scene hierarchy |
| unity://scene/active | Active scene info |
| unity://project/scripts | Script list |
| unity://project/scenes | Scene list |
| unity://editor/state | Editor state |
| unity://console/logs | Console logs |
| unity://session/info | Session info |
ScreenCapture - includes all UI overlaysCamera.main.Render() - no overlay UI{method: "camera"} for camera-only capturegameobject.find {name: "Player"} # By exact name
gameobject.find {tag: "Enemy"} # By tag
gameobject.find {componentType: "Camera"} # By component
gameobject.getAll {activeOnly: true} # All active objects
Unity may not auto-recompile after code changes. Use:
editor.refresh # Full asset refresh + recompile
For Claude Code / Cursor integration:
claude mcp add unity -- node /path/to/MCP~/index.jscurl http://127.0.0.1:27182/statusKeyboard/mouse simulation works for UI interactions but NOT for Input.GetKey(). For gameplay testing:
transform.setPosition to move objects directly| Issue | Solution |
|-------|----------|
| Tool timeout | Check Unity is responding, try editor.getState |
| Gateway no connection | Check Window → OpenClaw Plugin → Settings |
| MCP no connection | Start MCP Bridge, verify port 27182 |
| Scripts not updating | Use editor.refresh to force recompile |
| Wrong screenshot | Use Play mode for game view with UI |
| MCP 504 timeout | Unity busy or MCP Bridge not started |
| Test Runner not found | Install com.unity.test-framework package |
MIT License - See LICENSE file
Generated Feb 27, 2026
Automates UI and gameplay testing in Unity by simulating inputs and capturing screenshots. Developers can run repetitive tests like clicking buttons, typing text, and verifying visual outputs without manual intervention, speeding up quality assurance cycles.
Streamlines Unity project organization by automating scene loading, prefab instantiation, and asset copying or moving. This reduces manual errors in large projects, enabling efficient version control and backup workflows for teams.
Facilitates rapid prototyping by creating and modifying materials, adding components, and adjusting transforms programmatically. Artists and designers can iterate on visual elements like colors and textures quickly, enhancing creative workflows.
Automates the installation and management of Unity packages via commands, helping teams maintain consistent dependencies across projects. This reduces setup time for new developers and ensures compatibility in collaborative environments.
Provides tools to fetch and clear console logs, inspect hierarchies, and execute custom scripts for debugging. Developers can monitor errors and test code snippets in real-time, improving troubleshooting efficiency during development.
Offer the skill as part of a cloud service with tiered pricing for individual developers, small studios, and large enterprises. Revenue comes from monthly subscriptions that include updates, support, and integration with other development tools.
Provide a free version with basic tools like scene inspection and debugging, while charging for advanced features such as automated testing suites or asset management. This attracts a broad user base and converts power users to paid plans.
Sell customized licenses to game studios and media companies for integration into their proprietary workflows. Revenue is generated through upfront licensing fees, ongoing maintenance contracts, and dedicated support services.
💬 Integration Tip
Ensure the OpenClaw gateway is properly installed and restarted after setup; use the MCP Bridge for local tools like Claude Code to avoid remote connectivity issues.
Transform AI agents from task-followers into proactive partners that anticipate needs and continuously improve. Now with WAL Protocol, Working Buffer, Autonomous Crons, and battle-tested patterns. Part of the Hal Stack 🦞
Use the ClawdHub CLI to search, install, update, and publish agent skills from clawdhub.com. Use when you need to fetch new skills on the fly, sync installed skills to latest or a specific version, or publish new/updated skill folders with the npm-installed clawdhub CLI.
Clawdbot documentation expert with decision tree navigation, search scripts, doc fetching, version tracking, and config snippets for all Clawdbot features
Interact with Moltbook social network for AI agents. Post, reply, browse, and analyze engagement. Use when the user wants to engage with Moltbook, check their feed, reply to posts, or track their activity on the agent social network.
OpenClaw CLI wrapper — gateway, channels, models, agents, nodes, browser, memory, security, automation.
MoltGuard — runtime security plugin for OpenClaw agents by OpenGuardrails. Helps users install, register, activate, and check the status of MoltGuard. Use wh...