Task
Simulate keyboard input on Unity PlayMode: $ARGUMENTS
Workflow
- Ensure Unity is in PlayMode (use
uloop control-play-mode --action Play if not)
- Execute the appropriate
uloop simulate-keyboard command
- Take a screenshot to verify the result:
uloop screenshot --capture-mode rendering
- Report what happened
Tool Reference
uloop simulate-keyboard --action <action> --key <key> [options]
Parameters
| Parameter |
Type |
Default |
Description |
--action |
enum |
Press |
Press, KeyDown, KeyUp |
--key |
string |
(required) |
Key name matching Input System Key enum (e.g. W, Space, LeftShift, A, Enter). Case-insensitive. |
--duration |
number |
0 |
Hold duration in seconds for Press action (0 = one-shot tap). Ignored by KeyDown/KeyUp. |
Actions
| Action |
Behavior |
Use Case |
Press |
KeyDown → wait → KeyUp |
One-shot tap (jump, use item) |
KeyDown |
KeyDown only (held until KeyUp) |
Start continuous movement, hold sprint |
KeyUp |
KeyUp only (release held key) |
Stop movement, release sprint |
KeyDown/KeyUp Rules
KeyDown fails if the key is already held
KeyUp fails if the key is not currently held
- Multiple keys can be held simultaneously (e.g. W + LeftShift for sprint)
- All held keys are automatically released when PlayMode exits
- To hold a key for a fixed duration, prefer
--action Press --duration <seconds> (one-shot, blocks until release). For multi-key holds (e.g. Shift+W), issue separate KeyDown calls, then sleep <seconds> between them and the KeyUp calls.
Global Options
| Option |
Description |
--project-path <path> |
Optional. Use only when the target Unity project is not the current directory. |
Examples
# One-shot key press (tap W once)
uloop simulate-keyboard --action Press --key W
# Jump (tap Space)
uloop simulate-keyboard --action Press --key Space
# Hold W for 2 seconds (move forward)
uloop simulate-keyboard --action Press --key W --duration 2.0
# Sprint forward (hold Shift + W, then release)
uloop simulate-keyboard --action KeyDown --key LeftShift
uloop simulate-keyboard --action KeyDown --key W
uloop screenshot --capture-mode rendering
uloop simulate-keyboard --action KeyUp --key W
uloop simulate-keyboard --action KeyUp --key LeftShift
Output
Returns JSON with:
Success (boolean): Whether the action succeeded (e.g. KeyDown on a not-yet-held key, KeyUp on a currently-held key, or Press round-trip)
Message (string): Description of what happened or why it failed
Action (string): The --action value that was applied (Press, KeyDown, or KeyUp)
KeyName (string, nullable): The key that was acted on; may be null when the action could not resolve a key
Prerequisites
- Unity must be in PlayMode
- Input System package must be installed (
com.unity.inputsystem)
- Use this only when the project already uses the New Input System.
- Game code must read input via Input System API (e.g.
Keyboard.current[Key.W].isPressed), not legacy Input.GetKey()
1---2name: uloop-simulate-keyboard3description: Simulate keyboard input in PlayMode through Unity Input System. Use for key presses, holds, releases, and game controls such as WASD or Space.4---56# Task78Simulate keyboard input on Unity PlayMode: $ARGUMENTS910## Workflow11121. Ensure Unity is in PlayMode (use `uloop control-play-mode --action Play` if not)132. Execute the appropriate `uloop simulate-keyboard` command143. Take a screenshot to verify the result: `uloop screenshot --capture-mode rendering`154. Report what happened1617## Tool Reference1819```bash20uloop simulate-keyboard --action <action> --key <key> [options]21```2223### Parameters2425| Parameter | Type | Default | Description |26|-----------|------|---------|-------------|27| `--action` | enum | `Press` | `Press`, `KeyDown`, `KeyUp` |28| `--key` | string | (required) | Key name matching Input System Key enum (e.g. `W`, `Space`, `LeftShift`, `A`, `Enter`). Case-insensitive. |29| `--duration` | number | `0` | Hold duration in seconds for Press action (0 = one-shot tap). Ignored by KeyDown/KeyUp. |3031### Actions3233| Action | Behavior | Use Case |34|--------|----------|----------|35| `Press` | KeyDown → wait → KeyUp | One-shot tap (jump, use item) |36| `KeyDown` | KeyDown only (held until KeyUp) | Start continuous movement, hold sprint |37| `KeyUp` | KeyUp only (release held key) | Stop movement, release sprint |3839### KeyDown/KeyUp Rules4041- `KeyDown` fails if the key is already held42- `KeyUp` fails if the key is not currently held43- Multiple keys can be held simultaneously (e.g. W + LeftShift for sprint)44- All held keys are automatically released when PlayMode exits45- To hold a key for a fixed duration, prefer `--action Press --duration <seconds>` (one-shot, blocks until release). For multi-key holds (e.g. Shift+W), issue separate `KeyDown` calls, then `sleep <seconds>` between them and the `KeyUp` calls.4647### Global Options4849| Option | Description |50|--------|-------------|51| `--project-path <path>` | Optional. Use only when the target Unity project is not the current directory. |5253## Examples5455```bash56# One-shot key press (tap W once)57uloop simulate-keyboard --action Press --key W5859# Jump (tap Space)60uloop simulate-keyboard --action Press --key Space6162# Hold W for 2 seconds (move forward)63uloop simulate-keyboard --action Press --key W --duration 2.06465# Sprint forward (hold Shift + W, then release)66uloop simulate-keyboard --action KeyDown --key LeftShift67uloop simulate-keyboard --action KeyDown --key W68uloop screenshot --capture-mode rendering69uloop simulate-keyboard --action KeyUp --key W70uloop simulate-keyboard --action KeyUp --key LeftShift71```7273## Output7475Returns JSON with:76- `Success` (boolean): Whether the action succeeded (e.g. `KeyDown` on a not-yet-held key, `KeyUp` on a currently-held key, or `Press` round-trip)77- `Message` (string): Description of what happened or why it failed78- `Action` (string): The `--action` value that was applied (`Press`, `KeyDown`, or `KeyUp`)79- `KeyName` (string, nullable): The key that was acted on; may be `null` when the action could not resolve a key8081## Prerequisites8283- Unity must be in **PlayMode**84- **Input System package** must be installed (`com.unity.inputsystem`)85- Use this only when the project already uses the New Input System.86- Game code must read input via Input System API (e.g. `Keyboard.current[Key.W].isPressed`), not legacy `Input.GetKey()`