Tools
Unreal
A plugin for Openclaw to control the Unreal Editor.
Configuration Example
{
"host": "127.0.0.1",
"port": 18789,
"autoConnect": true,
"secret": "optional-secret-key"
}
README
# ๐ฆ OpenClaw Unreal Plugin
AI-assisted Unreal Engine development. Control the editor, manipulate actors, simulate input, and automate workflows through natural language.
[](https://opensource.org/licenses/MIT)
[](https://www.unrealengine.com/)
[](https://discord.com/invite/clawd)
## โ ๏ธ Disclaimer
This software is in **beta**. Use at your own risk.
- Always backup your project before using
- Test in a separate project first
- The authors are not responsible for any data loss or project corruption
See [LICENSE](LICENSE) for full terms.
## Features
- ๐ฎ **Editor Control** - Start/stop PIE, pause/resume
- ๐ญ **Actor Management** - Create, find, delete, modify actors
- ๐ **Transform Tools** - Position, rotation, scale manipulation
- ๐ผ๏ธ **Screenshots** - Capture viewport images
- โจ๏ธ **Input Simulation** - Keyboard, mouse, gamepad simulation
- ๐ฆ **Asset Browsing** - List and explore project content
- ๐ง **Console Commands** - Execute Unreal console commands
## Quick Start
### 1. Install Plugin
Copy to your project's Plugins folder:
```bash
cp -r openclaw-unreal-plugin YourProject/Plugins/OpenClaw
```
### 2. Enable Plugin
1. Open your Unreal project
2. Go to Edit โ Plugins
3. Search for "OpenClaw"
4. Enable the plugin
5. Restart the editor
### 3. Connect to OpenClaw
The plugin automatically connects to the OpenClaw gateway on startup.
Check connection: Window โ OpenClaw Status
## Configuration
Create `openclaw.json` in your project root:
```json
{
"host": "127.0.0.1",
"port": 18789,
"autoConnect": true,
"secret": "optional-secret-key"
}
```
Or in `~/.openclaw/unreal-plugin.json` for global config.
## Available Tools (40+)
### Level Management
| Tool | Description |
|------|-------------|
| `level.getCurrent` | Get current level info |
| `level.list` | List all levels in project |
| `level.open` | Open level by path |
| `level.save` | Save current level |
### Actor Tools
| Tool | Description |
|------|-------------|
| `actor.find` | Find actor by name |
| `actor.getAll` | Get all actors in level |
| `actor.create` | Spawn new actor |
| `actor.delete` | Remove actor |
| `actor.getData` | Get detailed actor info |
| `actor.setProperty` | Modify actor property |
### Transform Tools
| Tool | Description |
|------|-------------|
| `transform.getPosition` | Get actor world position |
| `transform.setPosition` | Set actor position |
| `transform.getRotation` | Get actor rotation |
| `transform.setRotation` | Set actor rotation |
| `transform.getScale` | Get actor scale |
| `transform.setScale` | Set actor scale |
### Component Tools
| Tool | Description |
|------|-------------|
| `component.get` | List actor components |
| `component.add` | Add component to actor |
| `component.remove` | Remove component |
### Editor Control
| Tool | Description |
|------|-------------|
| `editor.play` | Start Play in Editor |
| `editor.stop` | Stop PIE session |
| `editor.pause` | Pause execution |
| `editor.resume` | Resume execution |
| `editor.getState` | Get current state |
### Debug Tools
| Tool | Description |
|------|-------------|
| `debug.hierarchy` | Get world actor hierarchy |
| `debug.screenshot` | Capture screenshot |
| `debug.log` | Log message to output |
### Input Simulation
| Tool | Description |
|------|-------------|
| `input.simulateKey` | Simulate keyboard input |
| `input.simulateMouse` | Simulate mouse input |
| `input.simulateAxis` | Simulate axis/gamepad |
### Asset Tools
| Tool | Description |
|------|-------------|
| `asset.list` | List assets in path |
| `asset.import` | Import external asset |
### Console
| Tool | Description |
|------|-------------|
| `console.execute` | Run console command |
| `console.getLogs` | Get output log |
### Blueprint
| Tool | Description |
|------|-------------|
| `blueprint.list` | List blueprints |
| `blueprint.open` | Open in editor |
## Example Interactions
```
User: Show me all actors in the level
AI: [Executes debug.hierarchy]
Found 15 actors: PlayerStart, DirectionalLight, ...
User: Create a point light at (0, 0, 300)
AI: [Executes actor.create type="PointLight" x=0 y=0 z=300]
Created PointLight_1 at position (0, 0, 300)
User: Start the game and move forward
AI: [Executes editor.play, then input.simulateKey key="W"]
Started PIE, simulating W key press
User: Take a screenshot
AI: [Executes debug.screenshot]
Screenshot saved to Saved/Screenshots/screenshot_20260211_141500.png
```
## Architecture
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Unreal Editor โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ OpenClaw Plugin โ โ
โ โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโ โ โ
โ โ โ Connection โ โ Tools โ โ Input โ โ โ
โ โ โ Manager โ โ Handler โ โ Simulateโ โ โ
โ โ โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโ โโโโโโฌโโโโโ โ โ
โ โโโโโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโ โ
โโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโโโโ
โ โ โ
โผ HTTP Poll โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ OpenClaw Gateway โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โฒ
โ AI Requests
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ AI Assistant โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
## Requirements
- Unreal Engine 5.0 or later
- Windows, macOS, or Linux
- OpenClaw Gateway running
## Building from Source
```bash
# Clone repository
git clone https://github.com/openclaw/openclaw-unreal-plugin
# Copy to project
cp -r openclaw-unreal-plugin YourProject/Plugins/OpenClaw
# Regenerate project files
# Windows: Right-click .uproject โ Generate Visual Studio files
# Mac: Open with Xcode, build
```
## ๐ Security: Model Invocation Setting
When publishing to ClawHub or installing as a skill, you can configure `disableModelInvocation` in the skill metadata:
| Setting | AI Auto-Invoke | User Explicit Request |
|---------|---------------|----------------------|
| `false` (default) | โ
Allowed | โ
Allowed |
| `true` | โ Blocked | โ
Allowed |
### Recommendation for Unreal Plugin: **`true`**
**Reason:** During Unreal development, it's useful for AI to autonomously perform supporting tasks like checking actor hierarchy, taking screenshots, and inspecting components.
**When to use `true`:** For sensitive tools (payments, deletions, message sending, etc.)
```yaml
# Example skill metadata
metadata:
openclaw:
disableModelInvocation: true # Recommended for Unreal plugin
```
## Troubleshooting
### Compilation Error: "could not be compiled"
ํ๋ก์ ํธ ์ด ๋ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด:
1. **Binaries/Intermediate ์ญ์ **
```bash
rm -rf YourProject/Plugins/OpenClaw/Binaries
rm -rf YourProject/Plugins/OpenClaw/Intermediate
```
2. **ํ๋ก์ ํธ ๋ค์ ์ด๊ธฐ** - Unreal์ด ํ๋ฌ๊ทธ์ธ์ ์๋ก ๋น๋ํฉ๋๋ค.
### UE 5.7 Compatibility (v0.9.3+)
**v0.9.3 ์
๋ฐ์ดํธ:** UE 5.7 API ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์์ ํ ํธํ์ฑ ์์ ์๋ฃ.
| ์์ ๋ ์ด์ | ํด๊ฒฐ ๋ฐฉ๋ฒ |
|------------|----------|
| `PlayInEditor` ๋ฉ์๋ ์ ๊ฑฐ๋จ | `StartPlayInEditorSession()` ์ฌ์ฉ์ผ๋ก ๋ณ๊ฒฝ |
| `SendRegister` ์ ์ธ ๋๋ฝ | ํค๋์ `void SendRegister()` ์ ์ธ ์ถ๊ฐ |
| `HandleRegisterResponse` ์ ์ธ ๋๋ฝ | ํค๋์ ์ ์ธ ์ถ๊ฐ |
**UE 5.0 ~ 5.6 ์ฌ์ฉ์:** ์ด์ ๋ฒ์ ์์๋ API ํธํ์ฑ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค. v0.9.3๋ถํฐ UE 5.7+ ๊ถ์ฅ.
### macOS Gatekeeper: "node" Blocked
macOS์์ Gateway ์์ ์ `node`๊ฐ ์ฐจ๋จ๋๋ ๊ฒฝ์ฐ:
**๋ฐฉ๋ฒ 1: System Settings์์ ํ์ฉ**
1. System Settings โ Privacy & Security
2. ์๋๋ก ์คํฌ๋กค โ "node" ์ฐจ๋จ ๋ฉ์์ง ์ฐพ๊ธฐ
3. "Allow Anyway" ํด๋ฆญ
4. Gateway ๋ค์ ์์: `openclaw gateway restart`
**๋ฐฉ๋ฒ 2: ํฐ๋ฏธ๋์์ quarantine ์์ฑ ์ ๊ฑฐ**
```bash
xattr -d com.apple.quarantine ~/.nvm/versions/node/v24.13.0/bin/node
```
> **Note:** Node.js ๊ฒฝ๋ก๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค. `which node`๋ก ํ์ธํ์ธ์.
### Plugin not loading
- Check Output Log for errors
- Verify plugin is in `Plugins/OpenClaw/` folder
- Ensure `OpenClaw.uplugin` exists
### Not connecting to gateway
- Verify gateway is running: `openclaw gateway status`
- Check firewall allows port 18789 (default)
- Look for `[OpenClaw]` messages in Output Log
### Tools not executing
- Confirm connected (Window โ OpenClaw Status)
- Check Output Log for tool execution errors
- Ensure editor is not busy
## Contributing
1. Fork the repository
2. Create feature branch
3. Make changes
4. Submit pull request
## Support
- ๐ [Documentation](https://docs.openclaw.ai)
- ๐ฌ [Discord](https://discord.com/invite/clawd)
- ๐ [Issues](https://github.com/openclaw/openclaw-unreal-plugin/issues)
## License
MIT License - see [LICENSE](LICENSE) file.
---
Made with ๐ฆ by the OpenClaw community
tools
Comments
Sign in to leave a comment