chore(unity): 固定Unity CLI Loop本地包并移除UnitySkills依赖
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
---
|
||||
name: uloop-screenshot
|
||||
description: "Capture Unity Editor windows or Game View rendering as PNG. Use for visual checks, debugging, documentation, or annotated UI element coordinates."
|
||||
---
|
||||
|
||||
# uloop screenshot
|
||||
|
||||
Take a screenshot of any Unity EditorWindow by name and save as PNG.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
uloop screenshot [--window-name <name>] [--resolution-scale <scale>] [--match-mode <mode>] [--capture-mode <mode>] [--annotate-elements] [--elements-only] [--output-directory <path>]
|
||||
```
|
||||
|
||||
## Parameters
|
||||
|
||||
| Parameter | Type | Default | Description |
|
||||
|-----------|------|---------|-------------|
|
||||
| `--window-name` | string | `Game` | Window name to capture. Ignored when `--capture-mode rendering`. |
|
||||
| `--resolution-scale` | number | `1.0` | Resolution scale (0.1 to 1.0) |
|
||||
| `--match-mode` | enum | `exact` | Window name matching mode: `exact`, `prefix`, or `contains`. Ignored when `--capture-mode rendering`. |
|
||||
| `--capture-mode` | enum | `window` | `window`=capture EditorWindow including toolbar, `rendering`=capture game rendering only (PlayMode required, coordinates match simulate-mouse) |
|
||||
| `--output-directory` | string | `""` | Output directory path for saving screenshots. When empty, uses default path (.uloop/outputs/Screenshots/). Accepts absolute paths. |
|
||||
| `--annotate-elements` | boolean | `false` | Annotate interactive UI elements with index labels and interaction hints (A / CLICK, B / DRAG, ...). Only works with `--capture-mode rendering` in PlayMode. |
|
||||
| `--elements-only` | boolean | `false` | Return only annotated element JSON without capturing a screenshot image. Requires `--annotate-elements` and `--capture-mode rendering` in PlayMode. |
|
||||
|
||||
## Match Modes
|
||||
|
||||
| Mode | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `exact` | Window name must match exactly (case-insensitive) | "Project" matches "Project" only |
|
||||
| `prefix` | Window name must start with the input | "Project" matches "Project" and "Project Settings" |
|
||||
| `contains` | Window name must contain the input anywhere | "set" matches "Project Settings" |
|
||||
|
||||
## Window Name
|
||||
|
||||
The window name is the text displayed in the window's title bar (tab). Common names: Game, Scene, Console, Inspector, Project, Hierarchy, Animation, Animator, Profiler. Custom EditorWindow titles are also supported.
|
||||
|
||||
## Global Options
|
||||
|
||||
| Option | Description |
|
||||
|--------|-------------|
|
||||
| `--project-path <path>` | Optional. Use only when the target Unity project is not the current directory. |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Take a screenshot of Game View (default)
|
||||
uloop screenshot
|
||||
|
||||
# Capture game rendering (coordinates match simulate-mouse, PlayMode required)
|
||||
uloop screenshot --capture-mode rendering
|
||||
|
||||
# Annotate interactive UI elements with index labels (for simulate-mouse workflow)
|
||||
uloop screenshot --capture-mode rendering --annotate-elements
|
||||
|
||||
# Get UI element coordinates without capturing an image (fastest)
|
||||
uloop screenshot --capture-mode rendering --annotate-elements --elements-only
|
||||
|
||||
# Take a screenshot of Scene View
|
||||
uloop screenshot --window-name Scene
|
||||
|
||||
# Capture all windows starting with "Project" (prefix match)
|
||||
uloop screenshot --window-name Project --match-mode prefix
|
||||
|
||||
# Save screenshot to a specific directory
|
||||
uloop screenshot --output-directory /tmp/screenshots
|
||||
|
||||
# Combine options
|
||||
uloop screenshot --window-name Scene --resolution-scale 0.5 --output-directory /tmp/screenshots
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
Returns JSON with:
|
||||
- `ScreenshotCount`: Number of windows captured
|
||||
- `Screenshots`: Array of screenshot info, each containing:
|
||||
- `ImagePath`: Absolute path to the saved PNG file. Empty when `--elements-only` is used because no image file is written.
|
||||
- `FileSizeBytes`: Size of the saved file in bytes
|
||||
- `Width`: Captured image width in pixels
|
||||
- `Height`: Captured image height in pixels
|
||||
- `CoordinateSystem`: `"gameView"` or `"window"`
|
||||
- `ResolutionScale`: Resolution scale used for capture
|
||||
- `YOffset`: Y offset used for gameView coordinate conversion
|
||||
- `AnnotatedElements`: Array of annotated UI element metadata. Empty unless `--annotate-elements` is used.
|
||||
|
||||
For `AnnotatedElements` fields and gameView coordinate conversion, read [references/annotated-elements.md](references/annotated-elements.md) before using screenshot coordinates with mouse simulation tools.
|
||||
|
||||
When multiple windows match (e.g., multiple Inspector windows or when using `contains` mode), all matching windows are captured with numbered filenames (e.g., `Inspector_1_*.png`, `Inspector_2_*.png`).
|
||||
|
||||
## Notes
|
||||
|
||||
- Use `uloop focus-window` first if needed
|
||||
- Target window must be open in Unity Editor
|
||||
- Window name matching is always case-insensitive
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d3ca17bcf5b6546a6bde9c8958526273
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7a0b17bb8a40647d082146addab9e183
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,37 @@
|
||||
# Annotated Elements and Coordinates
|
||||
|
||||
Read this when using `uloop screenshot --capture-mode rendering --annotate-elements` to find coordinates for `simulate-mouse-ui` or `simulate-mouse-input`.
|
||||
|
||||
## AnnotatedElements Fields
|
||||
|
||||
`AnnotatedElements` is empty unless `--annotate-elements` is used. Entries are sorted by z-order, frontmost first. Each item contains:
|
||||
|
||||
- `Label`: Index label in JSON (`A` = frontmost, `B` = next, ...). Screenshot labels also include the interaction hint, such as `A / CLICK` or `B / DRAG`.
|
||||
- `Name`: Element name
|
||||
- `Path`: Hierarchy path from the scene root, for example `Canvas/Panel/Button`. Use this as `simulate-mouse-ui --target-path` when bypassing raycast blockers.
|
||||
- `Type`: Element type (`Button`, `Toggle`, `Slider`, `Dropdown`, `InputField`, `Scrollbar`, `Draggable`, `DropTarget`, `Selectable`)
|
||||
- `Interaction`: Derived interaction category (`Click`, `Drag`, `Drop`, `Text`). Use this to choose between `simulate-mouse-ui --action Click` and drag actions.
|
||||
- `SimX`, `SimY`: Center position in simulate-mouse coordinates. Use these directly with `--x` and `--y`.
|
||||
- `BoundsMinX`, `BoundsMinY`, `BoundsMaxX`, `BoundsMaxY`: Bounding box in simulate-mouse coordinates
|
||||
- `SortingOrder`: Canvas sorting order. Higher values are in front.
|
||||
- `SiblingIndex`: Transform sibling index under the element's direct parent. Do not use it as a reliable z-order signal across nested UI hierarchies.
|
||||
|
||||
## Coordinate Conversion
|
||||
|
||||
When `CoordinateSystem` is `"gameView"`, convert image pixel coordinates to simulate-mouse coordinates:
|
||||
|
||||
```text
|
||||
sim_x = image_x / ResolutionScale
|
||||
sim_y = image_y / ResolutionScale + YOffset
|
||||
```
|
||||
|
||||
When `ResolutionScale` is `1.0`, this simplifies to:
|
||||
|
||||
```text
|
||||
sim_x = image_x
|
||||
sim_y = image_y + YOffset
|
||||
```
|
||||
|
||||
## Annotation Readability
|
||||
|
||||
Annotated screenshots compensate border thickness for `ResolutionScale`, so the saved PNG keeps the intended outline width after downscaling. The neutral contrast borders are 2 output pixels each, and the colored middle border is 4 output pixels. Label outlines are also compensated and are separated from element borders by a 4 output pixel gap.
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 94b762d197c7747f997045586f70295e
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user