# Unreal

> Develop, test, and automate Unreal Engine 5.x projects with PlayUnreal, Remote Control, Automation Driver, and end-to-end flows. Use when working on Unreal automation, stable UMG selectors, externally driven tests, or CI-friendly packaged-build verification.

- Skill: `randroids-dojo/unreal` (Agent Skill, multi-file: 10 files)
- Install (CLI): `npx skillmds add randroids-dojo/unreal`
- Raw SKILL.md: https://api.skillmd.com/api/skills/randroids-dojo/unreal/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: randroids-dojo (https://skillmd.com/u/randroids-dojo)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/randroids-dojo/unreal

---


# Unreal Skill (WIP)

Automate Unreal Engine 5.x with PlayUnreal style external control.

Status: WIP. PlayUnreal repo: https://github.com/Randroids-Dojo/PlayUnreal

## Quick Reference

```bash
# Launch editor with Remote Control enabled
UnrealEditor "/path/MyGame.uproject" -ExecCmds="WebControl.StartServer"

# Packaged build (enable Remote Control)
MyGame.exe -RCWebControlEnable -RCWebInterfaceEnable -ExecCmds="WebControl.StartServer"

# Wait for Remote Control and ping a PlayUnreal automation actor.
# Resolve scripts/rc_wait_ready.py relative to this skill directory.
python <skill-dir>/scripts/rc_wait_ready.py \
  --host 127.0.0.1 --port 30010 \
  --object-path "/Game/Maps/Main.Main:PersistentLevel.PlayUnrealDriver_1"
```

## Setup Checklist

- Enable Remote Control and Automation Driver plugins.
- Add the PlayUnrealAutomation plugin to the project.
- Place the PlayUnreal driver actor or subsystem in the map.
- Tag key UMG widgets with automation IDs for stable selectors.
- Keep Remote Control on LAN/VPN only.

## Selector Strategy

- `id=StartButton` maps to Automation Driver `By::Id`.
- `path=#Menu//Start/<SButton>` maps to `By::Path`.
- `text="Start"` can be implemented via custom traversal if needed.

## PlayUnreal Python (target API)

```python
from playunreal import Unreal

async with Unreal.launch(
    uproject="MyGame.uproject",
    map="/Game/Maps/MainMenu",
    remote_control=True,
) as ue:
    page = ue.page()
    await page.locator("id=StartButton").click()
    await page.locator("id=HUDRoot").wait_for_visible()
    await page.screenshot("artifacts/started.png")
```

## Packaged Builds

- Use `-RCWebControlEnable -RCWebInterfaceEnable`.
- Ensure presets and assets are staged if using Remote Control presets.

## References

- Read [references/remote-control.md](references/remote-control.md) when configuring or diagnosing the external transport.
- Read [references/automation-driver.md](references/automation-driver.md) when implementing input or locator behavior.
- Read [references/umg-automation.md](references/umg-automation.md) when adding stable widget selectors.
- Read [references/playunreal.md](references/playunreal.md) when working on the PlayUnreal client or launch lifecycle.

