uloop-screenshot について
uloop-screenshot は、Unity Editor のウィンドウやゲーム描画を名前で指定して PNG に保存するスキルです。操作可能な UI 要素や物理コライダー候補の注釈にも対応します。
主な機能
- 01名前を指定した Editor ウィンドウの撮影
- 02Play Mode のゲーム描画の撮影
- 03スクリーンショット解像度の調整
- 04操作可能な UI 要素の注釈
- 05物理コライダー候補の注釈
- 06画像なしで要素メタデータを返却
活用シーン
- 01Unity ウィンドウを PNG として保存
- 02実行中ゲームの UI 要素を確認
- 03物理コライダー候補を特定
- 04画像を撮らずに注釈付き要素データを取得
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ hatayama/ unity-cli-loop --skill uloop-screenshotインストール後、Claude Code で/uloop-screenshotを入力して読み込まれたか確認します。
同梱ファイルreferences/annotated-elements.md
詳細
uloop スクリーンショット
名前を指定して任意の Unity EditorWindow のスクリーンショットを撮影し、PNG として保存します。
使用方法
uloop screenshot [--window-name <name>] [--resolution-scale <scale>] [--match-mode <mode>] [--capture-mode <mode>] [--annotate-elements] [--annotate-raycast-grid] [--raycast-layer-mask <layers>] [--elements-only] [--output-directory <path>]
パラメーター
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
--window-name | 文字列 | Game | キャプチャするウィンドウ名です(例:Game、Scene、Console、Inspector)。解決されたキャプチャモードがレンダリングの場合は無視されます(Play Mode 中は auto がレンダリングに解決されます)。Game タブが Device Simulator で、タイトルが Simulator の場合、デフォルトの Game は Simulator にフォールバックします。 |
--resolution-scale | 数値 | 1.0 | 解像度のスケール(0.1~1.0) |
--match-mode | 列挙型 | exact | ウィンドウ名の照合モード:exact、prefix、contains のいずれかです。解決されたキャプチャモードがレンダリングの場合は無視されます(Play Mode 中は auto がレンダリングに解決されます)。 |
--capture-mode | 列挙型 | auto | auto - PlayMode 中はレンダリング、それ以外はウィンドウ、window - ツールバーを含む EditorWindow をキャプチャ、rendering - ゲームのレンダリングのみをキャプチャ(PlayMode が必要)、GameView - rendering の別名です。レンダリングのスクリーンショットは ScreenshotToInputFormula を返します。これは、simulate-mouse-input(--dry-run を含む)または simulate-mouse-ui を呼び出す前に、未加工の画像ピクセルを変換するためのものです。 |
--output-directory | 文字列 | "" | スクリーンショットの保存先ディレクトリのパスです。空の場合はデフォルトのパス(.uloop/outputs/Screenshots/)を使用します。絶対パスも指定できます。 |
--annotate-elements | フラグ | - | 操作可能な UI 要素にインデックスラベルと操作ヒント(A / CLICK、B / DRAG、...)を付けます。応答には SortingOrder、次に SiblingIndex で並べ替えられた要素メタデータを含む AnnotatedElements 配列が含まれます(Z オーダーの近似値であり、描画順序を保証するものではありません)。解決されたキャプチャモードがレンダリングの場合(Play Mode 中は auto がレンダリングに解決されます)にのみ、PlayMode で動作します。 |
--annotate-raycast-grid | フラグ | - | クラスタリングされた 3D 物理コライダー候補を、AnnotatedElements 内の PhysicsCollider エントリーとして注釈付けします。Camera.main の可視性と、simulate-mouse-input と同じ左上基準の Game View 座標を使用します。解決されたキャプチャモードがレンダリングの場合(Play Mode 中は auto がレンダリングに解決されます)にのみ、PlayMode で動作します。 |
--raycast-layer-mask | 文字列 | "" | --annotate-raycast-grid がクラスタリングするレイヤーを絞り込むための、カンマ区切りの物理レイヤー名です。ヒット対象は Camera.main.cullingMask からも見えるレイヤーに限定されます。省略した場合は、Physics.DefaultRaycastLayers に対してクラスタリングします。 |
--elements-only | フラグ | - | スクリーンショット画像をキャプチャせず、注釈付き要素の JSON のみを返します。--annotate-elements または --annotate-raycast-grid の指定が必要で、解決されたキャプチャモードがレンダリングの場合(Play Mode 中は auto がレンダリングに解決されます)にのみ、PlayMode で動作します。 |
照合モード
| モード | 説明 | 例 |
|---|---|---|
exact | ウィンドウ名が完全に一致する必要があります(大文字と小文字は区別しません) | 「Project」は「Project」のみと一致します |
prefix | ウィンドウ名が入力文字列で始まる必要があります | 「Project」は「Project」と「Project Settings」に一致します |
contains | ウィンドウ名に入力文字列が含まれている必要があります | 「set」は「Project Settings」に一致します |
ウィンドウ名
ウィンドウ名は、ウィンドウのタイトルバー(タブ)に表示されるテキストです。一般的な名前:Game、Simulator、Scene、Console、Inspector、Project、Hierarchy、Animation、Animator、Profiler。カスタム EditorWindow のタイトルにも対応しています。
デバイスシミュレーター
- annotate → click のフローでは、
--capture-mode renderingを優先してください。通常の Game ビューと Device Simulator の両方で動作し、座標は--dry-runを含め、simulate-mouse-ui/simulate-mouse-inputと一致します。 --capture-mode windowでは、Editor のツールバーや枠線などもキャプチャされます。Device Simulator がプレイビューの場合、Game タブがないとデフォルトの--window-name GameはSimulatorにフォールバックします。また、--window-name Simulatorを指定することもできます。- Simulator の Fit to Screen/Scale/Safe Area オーバーレイはウィンドウ装飾のみであり、レンダリングモードの入力座標には影響しません。デバイスを回転した後は、クリックする前に annotate を再実行してください。回転すると Game View のサイズが変わるため、それ以前の
AnnotatedElementsエントリ(bounds、SimX/SimY、probe と occlusion の結果)はすべて古くなります。
出力
以下を含む JSON を返します。
ScreenshotCount:キャプチャしたウィンドウの数ResolvedCaptureMode:"window"または"rendering"—autoの解決後に実際に使用されたモードWarning:Play Mode の実行中に少なくとも 1 枚の画像を含むウィンドウキャプチャを行った場合、および Play Mode の一時停止中に画像をキャプチャした場合に表示されます(一時停止前にレンダリングされたフレームが UGUI/canvas の内容に表示されることがあります。更新するには、uloop control-play-mode --action Stepを 1 回実行してから、再度キャプチャしてください)。Screenshots:各項目に以下を含むスクリーンショット情報の配列ImagePath:保存された PNG ファイルの絶対パス。--elements-onlyを使用した場合は画像ファイルが書き込まれないため、空("")になります。この場合、FileSizeBytes、Width、Heightは0ですが、GameViewWidth/GameViewHeightとAnnotatedElementsには引き続き実際の値が設定されます。空でない場合は、必ずここに記載されたファイルを開いてください。出力ディレクトリには過去のキャプチャがすべて蓄積されるため、ディレクトリ一覧(ls -tなど)から最新のファイルを推測すると、以前の実行で作成された古いスクリーンショットを誤って選んでしまうことがあります。FileSizeBytes:保存されたファイルのサイズ(バイト単位)Width:キャプチャ画像の幅(ピクセル単位)Height:キャプチャ画像の高さ(ピクセル単位)ImageCoordinateSystem:"top-left-game-view"または"top-left-window"ResolutionScale:キャプチャに使用された解像度スケールImageToInputOffsetY:top-left-game-view 座標を変換する際に使用される Y オフセットGameViewWidth、GameViewHeight:キャプチャ時点の入力座標での Game View サイズ —SimX/SimYの基準であり、simulate-mouse-input内の Y 軸反転にも使用されます。--elements-onlyを含め、レンダリングキャプチャで値が設定されますScreenshotToInputFormula:画像の生ピクセルを simulate-mouse 入力座標に変換する式AnnotatedElements:注釈付き UI 要素のメタデータ配列。--annotate-elementsまたは--annotate-raycast-gridを使用しない限り空です。RaycastLayerSummaries/RaycastLayerNamesChecked:--annotate-raycast-gridを使用した場合に設定される Physics レイヤーの診断情報
AnnotatedElements/RaycastLayerSummaries のフィールドと gameView 座標の変換については、スクリーンショットの座標をマウスシミュレーションツールで使う前に references/annotated-elements.md をお読みください。
複数のウィンドウが一致する場合(Inspector ウィンドウが複数ある場合や、contains モードを使用する場合など)、一致したすべてのウィンドウが番号付きファイル名(例:Inspector_1_*.png、Inspector_2_*.png)でキャプチャされます。
注意事項
- 必要に応じて、最初に
uloop focus-windowを使用してください - 対象のウィンドウは Unity Editor で開いている必要があります
- ウィンドウ名の照合では、常に大文字と小文字が区別されません
コメント
Markdown 対応