Communitygithub.com

king-beomsoo/unity-motion-match

既存の画面スペースUnity uGUIをシーンおよびランタイム階層から自動検出・バインドし、UIテンプレートを抽出、プロジェクト固有のアダプター無しでリファレンスモーションを繰り返しマッチングします。レイアウトとシリアライズ接続を保持し、未サポートのUIや未確認のゲーム動作を報告します。オプションでレガシーゲームプロファイルも含みます。

unity-motion-match とは?

このスキルは、Unityプロジェクトにおいて既存のuGUI要素を自動的に検出・バインドし、動画リファレンスから抽出したモーションを既存のUIオブジェクトに適用するためのツールです。ユーザーはゲーム固有のC#アダプターを記述することなく、翻訳、均一スケール、不透明度の変更を固定カメラで行えます。まず、Unityエディタを介してシーンとランタイムのuGUI階層を解析し、独立した可視グループを自動選択、背景や各UIのテンプレート画像を抽出します。次に、リファレンス動画を配置し、ピクセルベースのフィッティングによりモーションデータを推定、ネイティブのAnimationClipとして出力します。検証プロセスではアンカー、ピボット、サイズ、レイアウト、シリアライズされたオブジェクト参照、イベントバインディング、最終ポーズ、ボタンのレイキャスト先などを自動チェックしますが、ゲーム固有のセマンティクス(購入や認証など)は検証しません。オプションでレガシーゲームプロファイルも利用可能です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/king-beomsoo/unity-motion-match/tree/HEAD

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Unity モーションマッチ

既存のuGUIに対するリファレンスモーションの置き換えに使用します。翻訳、均一スケール、不透明度を固定カメラで行います。隔離されたプロジェクトコピーで作業します。デフォルトのautoパスは、ゲーム固有のC#アダプターやプライベートゲームメソッドではなく、共通のEditorブリッジと生成されたバインディングデータを使用します。

検出と準備

選択、出力、制限については自動バインディングを、テストされた動作と残存するビジュアルフィッティングエラーについては検証スコープを参照してください。合成モデル、原著論文、再現可能なモーションベンチマークについては手法とエビデンスを参照してください。ソースは選択したUnity Editorでコンパイル可能であり、uGUIを含む必要があります。Pythonにはnumpy、scipy、opencv-python、Pillowが必要です。ffmpegは動画入力の場合のみ必要です。

python scripts/unity.py prepare --source C:/project --workspace C:/motion-work --editor "C:/Program Files/Unity/Hub/Editor/6000.3.21f1/Editor/Unity.exe"

これにより、Assets/Packages/ProjectSettingsがLibraryなしでコピーされ、シーンのCanvas/RectTransform/レイアウト/コンポーネント構造がインベントリされ、起動シーンが選択され、通常のPlay Modeで起動され、結果のUIが検出され、独立した可視グループが選択され、背景/静止/RGBAテンプレートが抽出されます。複数回の起動により、安定したインポート後ベースラインが確立されます。シーンは保存されず、ソースも編集されません。

selection.html、auto-report.json、auto-bindings.json、および抽出されたrest.png画像を検査してください。自動選択は構造的な提案であり、ユーザーがアニメーションさせたいUIに関する知識ではありません。タスクが特定の画面/グループを指定する場合は、--scene、--canvas、または繰り返し指定する--targetデータセレクターを使用してください。これらはアダプターコードを必要としません。重複する名前には、インベントリバインディングIDまたはユニークなパスが必要です。

インベントリのみを取得するには、同じsource/workspace引数でscanを使用してください。ゲーム起動なしでシリアライズされたシーンプレビューを行うには、明示的に--execution editを選択してください。それをプレビューとしてラベル付けし、ランタイム検証として扱わないでください。Play Modeの初期化に失敗した場合、編集プレビューを黙って代用しないでください。

ネイティブUnityは、ライセンスのためにホストの承認済み実行パスを必要とする場合があります。隔離されたコピーには既存の認可を使用してください。起動に失敗した場合はログを確認し、無関係なゲームコードを黙って繰り返しリトライしたり修復したりしないでください。準備されたワークスペースはスナップショットです。ソースUIを変更した後は、新しいワークスペースを作成してください。

マッチングとキャプチャ

録画をREFERENCE_ROOT/CASE-REVISION/に配置し、workspace.jsonのケースIDを使用します(例:c_abcd1234-r1/reference.mp4)。キャプチャは30fpsで2秒間のクリップを使用し、元の静止ポーズで終了します。

python scripts/unity.py match --workspace C:/motion-work --reference C:/references --revision r1

このコマンドはピクセルからモーションを推定し、solutions/REVISIONを書き込み、バインドされた既存オブジェクトのネイティブAnimationClipをサンプリングし、Unity出力をキャプチャし、保存状態をチェックします。新しい録画には常に再抽出が必要です。同じ録画に対しては、scripts/motion.py reviseで速度、軸固有の距離、またはずれを調整します。タイミング編集時には2秒の静止ポーズキーを保持し、編集後はunity.py capture --workspace ... --revision ...を再実行してください。

ピクセルフィッターはフル解像度のフィルタリングされた信号を使用し、リファレンスの最終静止フレームからの小さなテンプレート/ラスターの違いを較正します。*.fit.jsonのreferenceRestCalibrationを確認してください。単一色の不透明ピクセルグラフィックの場合、flatPaintOpacityは、グループの不透明度を測定するのに十分な数の個別の可視パッチがあったフレーム数を記録します。意図的に別のポーズ/不透明度で終了する録画は、このワークフローの有効な入力ではありません。

同じ名前の兄弟が存在する場合の曖昧なUnityアニメーションパスを避けるため、ターゲットごとに別々のルート相対.animファイルを自動エクスポートします。バインディングは実際のシーン/階層オブジェクトを識別します。ラッパーオブジェクト、再ペアレント化、名前変更されたコントロール、コールバックの配線変更は導入されません。

モーションをマッチと呼ぶ前に、出力をリファレンスと照らし合わせて検査してください。レイアウト/バインディングチェックに合格しても、視覚的類似性の証明にはなりません。かすかなピクセル、クリッピング、類似UI、重なり合う不透明度は、まだ補正が必要な場合があります。

MP4の場合、フィッターは静止背景のデコードによって生じる差異をチェックします。該当する単一色のグラフィックでは、多数のストロークで共有される明るさから不透明度を推定します。*.fit.jsonでは、videoOpacity.measuredFramesがrestStartsAtの前に使用可能な動画エビデンスがあるフレーム数をカウントします。その他のフレームは以前の推定値を保持します。再生時に重なりや急激な遷移を検査してください。数値的な最悪フレームバウンドを得るには、既知の参照不透明度値が必要です。

チェックが確立するもの

アンカー/ピボット/サイズ/レイアウト構成、シリアライズされたオブジェクト参照と永続的なイベントバインディング、最終ポーズ、利用可能な場合のボタンレイキャスト先、および2つのビューポートサイズでの復元状態を自動比較します。未知のボタンを呼び出したり、購入、認証、ナビゲーション、その他のゲーム固有の結果が正しいかどうかを推測したりしません。gameSpecificSemanticsVerifiedはfalseのままです。

アセット/構成ベースラインについては、unity.py audit --workspace ...を実行してください。検出、準備、置き換えのコストは分けてください。以前の手動プロファイルベンチマークは、自動検出のパフォーマンスを確立しません。

オプションの--profile trash-dashおよび--profile survivors-kitは、以前の既知ゲームインタラクションテストを保持します。それらのセマンティックテストが有用な場合にのみ、レガシープロファイルを参照してください。他のuGUIプロジェクトには必要ありません。

関連スキル