
Unity Plugin
- 1 installs
- 106 repo stars
- Updated July 8, 2026
- tomleelive/openclaw-unity-plugin
Let coding agents drive the Unity Editor via 44 structured tools for scenes, GameObjects, console logs, and play mode while you build a game.
About
Unity Plugin is an agent skill that documents the complete parameter reference for the OpenClaw Unity plugin’s 44 editor tools. game developers install it when they want Claude Code, Cursor, or similar agents to operate Unity predictably—querying console errors, inspecting scene hierarchies, loading scenes, and creating or finding GameObjects—without guessing JSON field names. The readme groups capabilities into console, scene, and GameObject families with copy-paste request examples, which matters because agent failures in Unity usually come from malformed tool payloads rather than missing C# knowledge. It is a phase-specific Build skill aimed at agent-tooling, not a gameplay systems tutorial. Pair it with your game design docs and coding skills; use it whenever the agent must act inside the Editor during integration and iteration on a Unity title.
- Reference for all 44 Unity plugin tools with JSON parameter shapes
- Console tools: getLogs, clear with optional type filters
- Scene tools: list, getActive, getData hierarchy, load additive or single
- GameObject tools: find by name/tag/component, create with primitives
- Designed for OpenClaw Unity plugin workflows alongside editor automation
Unity Plugin by the numbers
- 1 all-time installs (skills.sh)
- Ranked #218 of 247 Game Development skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/tomleelive/openclaw-unity-plugin --skill unity-pluginAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| repo stars | ★ 106 |
| Last updated | July 8, 2026 |
| Repository | tomleelive/openclaw-unity-plugin ↗ |
What it does
Let coding agents drive the Unity Editor via 44 structured tools for scenes, GameObjects, console logs, and play mode while you build a game.
Files
Unity Plugin Skill
Control Unity Editor through 44 built-in tools. Works in both Editor and Play mode.
Quick Reference
Core Tools
| Category | Key Tools |
|---|---|
| Scene | scene.getActive, scene.getData, scene.load |
| GameObject | gameobject.find, gameobject.create, gameobject.destroy |
| Component | component.get, component.set, component.add |
| Debug | debug.hierarchy, debug.screenshot, console.getLogs |
| Input | input.clickUI, input.type, input.keyPress |
| Editor | app.play, app.getState, editor.refresh |
Common Workflows
1. Scene Inspection
unity_execute: debug.hierarchy {depth: 2}
unity_execute: scene.getActive2. Find & Modify Objects
unity_execute: gameobject.find {name: "Player"}
unity_execute: component.get {objectName: "Player", componentType: "Transform"}
unity_execute: transform.setPosition {objectName: "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.screenshot4. Play Mode Control
unity_execute: app.play {state: true} # Enter Play mode
unity_execute: app.play {state: false} # Exit Play mode
unity_execute: app.getState # Check current state5. Force Recompile
unity_execute: editor.refresh # Refresh assets & recompile
unity_execute: editor.recompile # Request recompilation onlyTool Categories
Console (2 tools)
console.getLogs- Get logs with optional type filter (Log/Warning/Error)console.clear- Clear captured logs
Scene (4 tools)
scene.list- List scenes in build settingsscene.getActive- Get active scene infoscene.getData- Get full hierarchy datascene.load- Load scene by name
GameObject (6 tools)
gameobject.find- Find by name, tag, or componentgameobject.create- Create object or primitive (Cube, Sphere, etc.)gameobject.destroy- Destroy objectgameobject.getData- Get detailed datagameobject.setActive- Enable/disablegameobject.setParent- Change hierarchy
Transform (3 tools)
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 simple commandscript.read- Read script filescript.list- List project scripts
Application (3 tools)
app.getState- Get play mode, FPS, timeapp.play- Enter/exit Play modeapp.pause- Toggle pause
Debug (3 tools)
debug.log- Write to consoledebug.screenshot- Capture screenshotdebug.hierarchy- Text hierarchy view
Editor (4 tools)
editor.refresh- Refresh AssetDatabase (triggers recompile)editor.recompile- Request script recompilationeditor.focusWindow- Focus window (game/scene/console/hierarchy/project/inspector)editor.listWindows- List open windows
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
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 componentScript Recompilation
Unity may not auto-recompile after code changes. Use:
editor.refresh # Full asset refresh + recompilePlay Mode Transitions
- Plugin survives Play mode transitions via SessionState
- If connection lost, wait for auto-reconnect or use Window > OpenClaw Plugin > Force Reconnect
Troubleshooting
| Issue | Solution |
|---|---|
| Tool timeout | Check Unity is responding, try app.getState |
| No connection | Verify openclaw unity status, check gateway |
| Scripts not updating | Use editor.refresh to force recompile |
| Wrong screenshot | Use Play mode for game view with UI |
fileFormatVersion: 2
guid: db83e188b2baa49fe97a9f6092be69b8
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Unity Plugin Tools Reference
Complete parameter reference for all 44 tools.
Console Tools
console.getLogs
Get Unity console logs.
{
"count": 50, // Max logs to return (default: 50)
"type": "Error" // Optional: "Log", "Warning", "Error", "Exception"
}console.clear
Clear captured logs. No parameters.
---
Scene Tools
scene.list
List all scenes in build settings. No parameters.
scene.getActive
Get active scene info. No parameters. Returns: name, path, buildIndex, isLoaded, rootCount
scene.getData
Get full scene hierarchy.
{
"depth": 3 // How deep to traverse (default: unlimited)
}scene.load
Load a scene.
{
"sceneName": "GameScene", // Scene name or path
"additive": false // Load additively (default: false)
}---
GameObject Tools
gameobject.find
Find GameObjects.
{
"name": "Player", // Find by exact name
"tag": "Enemy", // Find by tag
"componentType": "Camera", // Find by component type
"includeInactive": false, // Include inactive objects
"depth": 1 // Child depth to return
}gameobject.create
Create GameObject.
{
"name": "MyObject", // Object name
"primitive": "Cube", // Optional: Cube, Sphere, Cylinder, Capsule, Plane, Quad
"parent": "ParentName", // Optional parent
"position": {"x": 0, "y": 0, "z": 0}
}gameobject.destroy
Destroy GameObject.
{
"name": "ObjectToDestroy"
}gameobject.getData
Get detailed object data.
{
"name": "Player",
"includeComponents": true // Include component list
}gameobject.setActive
Enable/disable object.
{
"name": "Player",
"active": true
}gameobject.setParent
Change parent.
{
"name": "Child",
"parent": "NewParent", // null to unparent
"worldPositionStays": true
}---
Transform Tools
transform.setPosition
Set world position.
{
"objectName": "Player",
"x": 10, "y": 0, "z": 5
}transform.setRotation
Set rotation (Euler angles).
{
"objectName": "Player",
"x": 0, "y": 90, "z": 0
}transform.setScale
Set local scale.
{
"objectName": "Player",
"x": 1, "y": 2, "z": 1
}---
Component Tools
component.add
Add component to object.
{
"objectName": "Player",
"componentType": "Rigidbody"
}component.remove
Remove component.
{
"objectName": "Player",
"componentType": "Rigidbody"
}component.get
Get component data.
{
"objectName": "Player",
"componentType": "Transform"
}component.set
Set component field/property.
{
"objectName": "Player",
"componentType": "Rigidbody",
"fieldName": "mass",
"value": 10
}component.list
List available component types.
{
"filter": "Collider" // Optional filter string
}---
Script Tools
script.execute
Execute simple command.
{
"command": "Debug.Log(\"Hello\")"
}script.read
Read script file.
{
"path": "Assets/Scripts/Player.cs"
}script.list
List script files.
{
"folder": "Assets/Scripts", // Optional folder
"pattern": "*.cs" // Optional pattern
}---
Application Tools
app.getState
Get application state. No parameters. Returns: isPlaying, isPaused, platform, unityVersion, productName, fps, time
app.play
Control Play mode.
{
"state": true // true = play, false = stop
}app.pause
Toggle pause. No parameters.
---
Debug Tools
debug.log
Write to console.
{
"message": "Test message",
"type": "Log" // "Log", "Warning", "Error"
}debug.screenshot
Capture screenshot.
{
"method": "screencapture", // "screencapture" or "camera"
"superSize": 1 // Resolution multiplier
}debug.hierarchy
Get text hierarchy view.
{
"depth": 2 // Max depth
}---
Editor Tools
editor.refresh
Refresh AssetDatabase (triggers recompile). No parameters.
editor.recompile
Request script recompilation. No parameters.
editor.focusWindow
Focus Editor window.
{
"window": "game" // game, scene, console, hierarchy, project, inspector
}editor.listWindows
List open Editor windows. No parameters.
---
Input Tools
input.keyPress
Press and release key.
{
"key": "Space" // Key name (e.g., "A", "Space", "Return", "Escape")
}input.keyDown
Press and hold key.
{
"key": "W"
}input.keyUp
Release key.
{
"key": "W"
}input.type
Type text.
{
"text": "Hello World",
"elementName": "InputField" // Optional: target input field
}input.mouseMove
Move mouse.
{
"x": 500, "y": 300
}input.mouseClick
Click at position.
{
"x": 500, "y": 300,
"button": 0 // 0=left, 1=right, 2=middle
}input.mouseDrag
Drag operation.
{
"startX": 100, "startY": 100,
"endX": 200, "endY": 200,
"button": 0
}input.mouseScroll
Scroll wheel.
{
"delta": 120 // Positive = up, negative = down
}input.getMousePosition
Get cursor position. No parameters.
input.clickUI
Click UI element by name.
{
"name": "PlayButton"
}fileFormatVersion: 2
guid: 18f58438a0dd64b7ca4c5280e68ca16e
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 3d86775a7dd3f4dd993440c4ec76f887
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant: