← 返回 Skills 市场
mlichao456

Unity Plugin

作者 mlichao456 · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
55
总下载
0
收藏
0
当前安装
1
版本数
在 OpenClaw 中安装
/install unity-plugin
功能描述
Control Unity Editor via OpenClaw Unity Plugin. Use for Unity game development tasks including scene management, GameObject/Component manipulation, debugging...
使用说明 (SKILL.md)

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 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 (8 tools)

  • 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 (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 rotation
  • transform.setScale - Set local scale

Component (5 tools)

  • 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 (3 tools)

  • script.execute - Execute code: Debug.Log, Time, PlayerPrefs, reflection calls
  • script.read - Read script file
  • script.list - List project scripts

Application (4 tools)

  • app.getState - Get play mode, FPS, time
  • app.play - Enter/exit Play mode
  • app.pause - Toggle pause
  • app.stop - Stop Play mode

Debug (3 tools)

  • debug.log - Write to console
  • debug.screenshot - Capture screenshot
  • debug.hierarchy - Text hierarchy view

Editor (9 tools)

  • 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 Simulation (10 tools)

  • 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 (5 tools) - NEW in v1.5.0

  • 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 (5 tools) - NEW in v1.5.0

  • 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 (7 tools) - NEW in v1.5.0

  • 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 Manager (4 tools) - NEW in v1.5.0

  • 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 Runner (3 tools) - NEW in v1.5.0

  • test.run - Run EditMode/PlayMode tests with filtering
  • test.list - List available tests
  • test.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} objects
    • stopOnError: 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 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 (3 tools) - NEW in v1.6.0

  • shader.list - List shaders in project
  • shader.getInfo - Get shader properties and info
  • shader.getKeywords - Get shader keywords

Texture (5 tools) - NEW in v1.6.0

  • 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

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:

  1. Start: Window → OpenClaw Plugin → MCP Bridge → Start
  2. Register: claude mcp add unity -- node /path/to/MCP~/index.js
  3. 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.setPosition to 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

License

MIT License - See LICENSE file

安全使用建议
Install only if you are comfortable giving OpenClaw broad control over a Unity project. Use a test or backed-up project first, verify whether model auto-invocation is actually disabled in the registry, keep the gateway/MCP bridge restricted to trusted local access, and manually approve destructive, package, or script.execute operations.
功能分析
Type: OpenClaw Skill Name: unity-plugin Version: 1.0.0 The skill provides high-risk capabilities including arbitrary C# code execution via reflection (script.execute), installation of packages from arbitrary Git URLs (package.add), and full UI input simulation. While these tools are aligned with the stated purpose of Unity Editor control and the skill defaults to disableModelInvocation: true, they represent a significant attack surface. The scripts/install-extension.sh script also performs file system modifications to install a gateway extension in the user's home directory (~/.openclaw/extensions/unity). No clear evidence of intentional malice was detected in the extension code (extension/index.ts) or instructions.
能力标签
cryptocan-make-purchases
能力评估
Purpose & Capability
The Unity Editor control purpose is coherent, but the exposed tool surface includes destructive project changes, package management, input simulation, screenshots/log access, and raw Unity script execution without clear per-action guardrails.
Instruction Scope
The registry metadata says model invocation is enabled, while SKILL.md and README claim disableModelInvocation is true and that the AI will not auto-call tools. That mismatch matters because the tools can mutate projects.
Install Mechanism
The registry says there is no install spec, but the documentation provides a user-run script that copies a gateway extension into ~/.openclaw/extensions/unity and requires a gateway restart. This is disclosed and purpose-aligned, but it is persistent executable integration.
Credentials
The gateway extension registers HTTP endpoints with permissive CORS and no authentication shown in the provided code, while routing commands to an active Unity session. This is broad authority over a local development environment.
Persistence & Privilege
Installing the extension makes a persistent OpenClaw gateway plugin available with a registered HTTP handler and unity_execute tool. The persistence is disclosed, but combined with broad Unity mutation and unclear invocation controls it warrants review.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install unity-plugin
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /unity-plugin 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
Initial release of Unity Plugin Skill for OpenClaw. - Control Unity Editor using ~100 built-in tools for scenes, GameObjects, components, assets, materials, prefabs, editor, input, and more. - Works via remote (OpenClaw Gateway) and local (MCP Bridge) connection modes. - Includes step-by-step setup and installation guide for skill extension. - Comprehensive tool reference tables and categorized workflow examples for common Unity tasks. - Enhanced security: disables automated tool invocation; only runs explicitly requested commands. - Provides guidance for installation, configuration, and supported command syntax.
元数据
Slug unity-plugin
版本 1.0.0
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 1
常见问题

Unity Plugin 是什么?

Control Unity Editor via OpenClaw Unity Plugin. Use for Unity game development tasks including scene management, GameObject/Component manipulation, debugging... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 55 次。

如何安装 Unity Plugin?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install unity-plugin」即可一键安装,无需额外配置。

Unity Plugin 是免费的吗?

是的,Unity Plugin 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Unity Plugin 支持哪些平台?

Unity Plugin 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Unity Plugin?

由 mlichao456(@mlichao456)开发并维护,当前版本 v1.0.0。

💬 留言讨论