Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
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. Triggers on Unity-related requests like inspecting scenes, creating objects, taking screenshots, testing gameplay, or controlling the Editor.
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. Triggers on Unity-related requests like inspecting scenes, creating objects, taking screenshots, testing gameplay, or controlling the Editor.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
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.
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.
Control Unity Editor through ~100 built-in tools. Works in both Editor and Play mode.
For Telegram, Discord, and other OpenClaw channels: Auto-connects when Unity opens Configure in: Window β OpenClaw Plugin β Settings
For Claude Code, Cursor, and local AI tools: Start: Window β OpenClaw Plugin β MCP Bridge β Start Default port: 27182 Add to Claude Code: claude mcp add unity -- node <path>/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λ‘ μ€μ λμ΄ μμ΅λλ€. AIκ° μλμΌλ‘ λꡬλ₯Ό νΈμΆνμ§ μμ μ¬μ©μκ° λͺ μμ μΌλ‘ μμ²ν μμ λ§ μ€ν μ€μ λ³κ²½ λ°©λ²μ README.mdλ₯Ό μ°Έμ‘°νμΈμ.
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
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 logs
scene.list - List scenes in build settings scene.getActive - Get active scene info scene.getData - Get full hierarchy data scene.load - Load scene by name (Play mode) scene.open - Open scene in Editor mode scene.save - Save active scene (Editor mode) scene.saveAll - Save all open scenes (Editor mode)
gameobject.find - Find by name, tag, or component gameobject.getAll - Get all GameObjects with filtering gameobject.create - Create object or primitive (Cube, Sphere, etc.) gameobject.destroy - Destroy object gameobject.delete - Delete object (alias for destroy) gameobject.getData - Get detailed data gameobject.setActive - Enable/disable gameobject.setParent - Change hierarchy
transform.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 rotation transform.setScale - Set local scale
component.add - Add component by type name component.remove - Remove component component.get - Get component data/properties component.set - Set field/property value component.list - List available component types
script.execute - Execute code: Debug.Log, Time, PlayerPrefs, reflection calls script.read - Read script file script.list - List project scripts
app.getState - Get play mode, FPS, time app.play - Enter/exit Play mode app.pause - Toggle pause app.stop - Stop Play mode
debug.log - Write to console debug.screenshot - Capture screenshot debug.hierarchy - Text hierarchy view
editor.refresh - Refresh AssetDatabase (triggers recompile) editor.recompile - Request script recompilation editor.domainReload - Force domain reload editor.focusWindow - Focus window (game/scene/console/hierarchy/project/inspector) editor.listWindows - List open windows editor.getState - Get editor state editor.play - Enter Play mode editor.stop - Exit Play mode editor.pause / editor.unpause - Pause control
input.keyPress - Press and release key input.keyDown / input.keyUp - Hold/release key input.type - Type text into field input.mouseMove - Move cursor input.mouseClick - Click at position input.mouseDrag - Drag operation input.mouseScroll - Scroll wheel input.getMousePosition - Get cursor position input.clickUI - Click UI element by name
material.create - Create material with shader, color, metallic, smoothness material.assign - Assign material to GameObject material.modify - Modify material properties (color, metallic, emission) material.getInfo - Get detailed material info with all shader properties material.list - List materials in project with filtering
prefab.create - Create prefab from scene GameObject prefab.instantiate - Instantiate prefab in scene with position prefab.open - Open prefab for editing prefab.close - Close prefab editing mode prefab.save - Save currently edited prefab
asset.find - Search assets by query, type, folder asset.copy - Copy asset to new path asset.move - Move/rename asset asset.delete - Delete asset (with trash option) asset.refresh - Refresh AssetDatabase asset.import - Import/reimport specific asset asset.getPath - Get asset path by name
package.add - Install package by name or git URL package.remove - Remove installed package package.list - List installed packages package.search - Search Unity package registry
test.run - Run EditMode/PlayMode tests with filtering test.list - List available tests test.getResults - Get last test run results
batch.execute - Execute multiple tools in one call (10-100x performance) commands: Array of {tool, params} objects stopOnError: Stop on first error (default: false)
session.getInfo - Get session info (project, processId, machineName, sessionId)
scriptableobject.create - Create new ScriptableObject asset scriptableobject.load - Load and inspect ScriptableObject fields scriptableobject.save - Save ScriptableObject changes scriptableobject.getField - Get specific field value scriptableobject.setField - Set field value with auto-save scriptableobject.list - List ScriptableObjects in project
shader.list - List shaders in project shader.getInfo - Get shader properties and info shader.getKeywords - Get shader keywords
texture.create - Create new texture with color fill texture.getInfo - Get texture info (size, format, import settings) texture.setPixels - Fill region with color texture.resize - Resize texture via import settings texture.list - List textures in project
Register project-specific tools: OpenClawCustomTools.Register( "mygame.getScore", "Get current score", (args) => new { success = true, score = GameManager.Score } );
Access Unity data via MCP resource URIs: URIDescriptionunity://scene/hierarchyScene hierarchyunity://scene/activeActive scene infounity://project/scriptsScript listunity://project/scenesScene listunity://editor/stateEditor stateunity://console/logsConsole logsunity://session/infoSession info
Play mode: ScreenCapture - includes all UI overlays Editor mode: Camera.main.Render() - no overlay UI Use {method: "camera"} for camera-only capture
gameobject.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
Plugin survives Play mode transitions via SessionState If connection lost, wait for auto-reconnect or use Window β OpenClaw Plugin β Settings β Connect
For Claude Code / Cursor integration: Start: Window β OpenClaw Plugin β MCP Bridge β Start Register: claude mcp add unity -- node /path/to/MCP~/index.js Verify: curl http://127.0.0.1:27182/status
Keyboard/mouse simulation works for UI interactions but NOT for Input.GetKey(). For gameplay testing: Use transform.setPosition to move objects directly Or migrate to Unity's new Input System
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
Skill Repository: https://github.com/TomLeeLive/openclaw-unity-skill Plugin Repository: https://github.com/TomLeeLive/openclaw-unity-plugin OpenClaw Docs: https://docs.openclaw.ai MCP Setup Guide: See Plugin Repository β Documentation~/SETUP_GUIDE.md
MIT License - See LICENSE file
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.