Unity Skill
Control 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.
Control 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.
Real data. Real impact.
Growing
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Control 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 <path>/MCP~/index.jsIf
unity_execute tool is not available, install the gateway extension:
# From skill directory ./scripts/install-extension.shRestart 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 | , , , , |
| GameObject | , , , |
| Component | , , , |
| Transform | , , |
| Debug | , , |
| Input | , , , |
| Editor | , , , |
| Material | , , , |
| Prefab | , , , |
| Asset | , , , |
| Package | , , , |
| Test | , , |
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 |
|---|---|
| Scene hierarchy |
| Active scene info |
| Script list |
| Scene list |
| Editor state |
| Console logs |
| 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 |
| Gateway no connection | Check Window → OpenClaw Plugin → Settings |
| MCP no connection | Start MCP Bridge, verify port 27182 |
| Scripts not updating | Use 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 package |
MIT License - See LICENSE file
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.