Unity Plugin
/install unity-plugin
Unity Plugin Skill
Control Unity Editor through ~100 built-in tools. Works in both Editor and Play mode.
Connection Modes
1. OpenClaw Gateway (Remote)
For Telegram, Discord, and other OpenClaw channels:
- Auto-connects when Unity opens
- Configure in: Window → OpenClaw Plugin → Settings
2. MCP Bridge (Local)
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 \x3Cpath>/MCP~/index.js
First-Time Setup
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.
What install-extension.sh Does
# 1. Copies extension files from skill to gateway
# Source: \x3Cskill>/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.
🔐 Security
이 스킬은 disableModelInvocation: true로 설정되어 있습니다.
- AI가 자동으로 도구를 호출하지 않음
- 사용자가 명시적으로 요청한 작업만 실행
설정 변경 방법은 README.md를 참조하세요.
Quick Reference
Core Tools
| 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 |
Common Workflows
1. Scene Inspection
unity_execute: debug.hierarchy {depth: 2}
unity_execute: scene.getActive
2. Find & Modify Objects
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}
3. UI Testing
unity_execute: input.clickUI {name: "PlayButton"}
unity_execute: input.type {text: "TestUser", elementName: "UsernameInput"}
unity_execute: debug.screenshot
4. Play Mode Control
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
5. Material Creation
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"}
6. Prefab Workflow
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
7. Asset Management
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"}
8. Package Management
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"}
9. Test Running
unity_execute: test.list {testMode: "EditMode"}
unity_execute: test.run {testMode: "EditMode", filter: "PlayerTests"}
unity_execute: test.getResults
10. Script Execution (Enhanced)
# 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)"}
Tool Categories (~100 tools)
Console (3 tools)
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 (7 tools)
scene.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 (8 tools)
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 hierarchy
Transform (6 tools)
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 rotationtransform.setScale- Set local scale
Component (5 tools)
component.add- Add component by type namecomponent.remove- Remove componentcomponent.get- Get component data/propertiescomponent.set- Set field/property valuecomponent.list- List available component types
Script (3 tools)
script.execute- Execute code: Debug.Log, Time, PlayerPrefs, reflection callsscript.read- Read script filescript.list- List project scripts
Application (4 tools)
app.getState- Get play mode, FPS, timeapp.play- Enter/exit Play modeapp.pause- Toggle pauseapp.stop- Stop Play mode
Debug (3 tools)
debug.log- Write to consoledebug.screenshot- Capture screenshotdebug.hierarchy- Text hierarchy view
Editor (9 tools)
editor.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 control
Input Simulation (10 tools)
input.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 name
Material (5 tools) - NEW in v1.5.0
material.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 filtering
Prefab (5 tools) - NEW in v1.5.0
prefab.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 prefab
Asset (7 tools) - NEW in v1.5.0
asset.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 name
Package Manager (4 tools) - NEW in v1.5.0
package.add- Install package by name or git URLpackage.remove- Remove installed packagepackage.list- List installed packagespackage.search- Search Unity package registry
Test Runner (3 tools) - NEW in v1.5.0
test.run- Run EditMode/PlayMode tests with filteringtest.list- List available teststest.getResults- Get last test run results
Batch Execution (1 tool) - NEW in v1.6.0
batch.execute- Execute multiple tools in one call (10-100x performance)commands: Array of {tool, params} objectsstopOnError: Stop on first error (default: false)
Session (1 tool) - NEW in v1.6.0
session.getInfo- Get session info (project, processId, machineName, sessionId)
ScriptableObject (6 tools) - NEW in v1.6.0
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 project
Shader (3 tools) - NEW in v1.6.0
shader.list- List shaders in projectshader.getInfo- Get shader properties and infoshader.getKeywords- Get shader keywords
Texture (5 tools) - NEW in v1.6.0
texture.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 project
Custom Tools API - v1.6.0
Register project-specific tools:
OpenClawCustomTools.Register(
"mygame.getScore",
"Get current score",
(args) => new { success = true, score = GameManager.Score }
);
MCP Resources - v1.6.0
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 |
Tips
Screenshot Modes
- Play mode:
ScreenCapture- includes all UI overlays - Editor mode:
Camera.main.Render()- no overlay UI - Use
{method: "camera"}for camera-only capture
Finding Objects
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
Script Recompilation
Unity may not auto-recompile after code changes. Use:
editor.refresh # Full asset refresh + recompile
Play Mode Transitions
- Plugin survives Play mode transitions via SessionState
- If connection lost, wait for auto-reconnect or use Window → OpenClaw Plugin → Settings → Connect
MCP Bridge Usage
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
Input Simulation Limitation
Keyboard/mouse simulation works for UI interactions but NOT for Input.GetKey(). For gameplay testing:
- Use
transform.setPositionto move objects directly - Or migrate to Unity's new Input System
Troubleshooting
| 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 |
Links
- 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
License
MIT License - See LICENSE file
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install unity-plugin - After installation, invoke the skill by name or use
/unity-plugin - Provide required inputs per the skill's parameter spec and get structured output
What is Unity Plugin?
Control Unity Editor via OpenClaw Unity Plugin. Use for Unity game development tasks including scene management, GameObject/Component manipulation, debugging... It is an AI Agent Skill for Claude Code / OpenClaw, with 55 downloads so far.
How do I install Unity Plugin?
Run "/install unity-plugin" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Unity Plugin free?
Yes, Unity Plugin is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Unity Plugin support?
Unity Plugin is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Unity Plugin?
It is built and maintained by mlichao456 (@mlichao456); the current version is v1.0.0.