game-dev-combat-animation について
測定、フレーム撮影、テスト、ブラインドレビューを通じて戦闘アニメーションを改善するゲーム開発スキルです。キャラクターの攻撃や弓動作を、基準作成からリリースまで整えます。
主な機能
- 01動作ごとのアニメーション規則策定
- 02腕の解剖学に基づくキー設計
- 03関節範囲とスキン変形の測定
- 042つの視点での動作テスト
- 05ブラインドレビューによる撮影結果の比較
- 06検証済み変更の記録とリリース
活用シーン
- 01剣撃後のフォロースルー改善
- 02弓の引きとリリース姿勢の修正
- 03アニメーション中の腕の変形診断
- 04リリース前のアニメーション版比較
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mengto/ skills --skill game-dev-combat-animationインストール後、Claude Code で/game-dev-combat-animationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/review.mdrules.mdtechniques.mdthornvigil.mdtraps.mdscripts/install.shscripts/tools/ab-pack.pyanchor.mjsarmcheck.mjsat.mjsbaketime.mjsdrawfit.mjsencode.swiftface.mjshost.htmljumps.mjskeydesign.mjsknight-measure.mjsmsheet.pyplay.jspsheet.pysetup.jsshot.jsvidcompose.pytemplates/ab-judge-prompt.mdcritic-prompt.md詳細
ゲーム開発:戦闘アニメーション
Thornvigil の騎士と弓兵の調整(2026-09-30~10-01、リリース 1.0.71 および 1.0.72)から要点をまとめたものです。結果は次のとおりです。
- 腕と手の動きは、前回のリリースとのブラインド A/B 比較 8 回中 5 回で勝ちました。
- 弓兵の壊れたアンカーと、騎士の腕をまっすぐ伸ばしたまま固まるフォロースルーを修正しました。
- 数値で早期に検出できたはずの落とし穴が原因で、7 回にわたって修正を行いました。落とし穴は以下に記載しています。
プロジェクトのファイル、コマンド、現在の状態については references/thornvigil.md を、キーを変更する前に references/traps.md を読んでください。
ワークフロー
- キーに手を加える前に、標準を記述します。
docs/combat-animation-standard.md(またはプロジェクトの同等のファイル)を拡張し、その動き独自の番号付きルールを追加します。- ゲームのクロックに基づくフェーズ:予備動作、ルールで指定されたフレームでの接触またはリリース、回復。
- 身体の動き、武器の軌道、カメラからの見え方。
- 各ルールに test(測定)または reviewed(フレームを見て評価)を明記します。
- すべてのルールを実際のリファレンスに基づかせます。身体の動きには Tripo Studio のモーションキャプチャープリセット、またはアーチェリーの射法サイクルなどの指導を受けた技術を使います。Tripo のプリセットのみを使用してください。ユーザーは Mixamo のアカウントを持っておらず、Quaternius も使用しない意向です。
- まずベースラインを取得します。 Characters ページとゲーム内の両方でキャプチャし、フレームを保存して、何かを変更する前にブラインド採点を行います。
- 手の位置ではなく、解剖学的構造に基づいてキーを設計します。 各キーについて、上腕の方向
u、前腕の方向f、刃の方向bを選び、keydesign.mjsを実行します。手の目標位置を返し、次の項目にフラグを立てます。- 100°を超える挙上角。
- 12~140°の範囲外の屈曲。
- 前腕から 25~115°の範囲外にある刃。
手のキーは肩に追従します。刃と肘のキーはワールド座標の方向です。
references/techniques.mdを参照してください。
- 見る前に測定します。 ベイクした後、次を実行します。
armcheck.mjsで、実際のメッシュにおける関節の可動域と、腕の各領域のスキンの伸び・つぶれを確認します。at.mjsで、指定時刻の拳と刃の位置を確認します。- 動き固有のプローブ(
knight-measure.mjs、anchor.mjs、またはdrawfit.mjs)を実行します。 ルールに違反する数値は、キャプチャに時間をかける前に修正します。
- テストします。 腕の可動域テストと、その動きのテストを実行します。バグのテストを追加したときは、一時的にバグを再現してテストが失敗することを確認します。コードと同じ誤った規約を参照するテストは、いつまでも通り続けます。
- 両方のカメラでキャプチャし、フル解像度で自分の目で確認します。 正面からはよく見えるポーズでも、ゲームカメラからは崩れて見えることがあり、その逆もあります。各キャプチャを前回のラウンドと比較し、新しいものであることを確認します。
- 評価します。 固定の基準(5 項目 × 0~2 点。低い方のスコアを採用)を使って、2 人のブラインド評価者に採点してもらい、前回のリリースとのブラインド A/B 比較を行います。シートタイトルは同一にします。その後、指摘に基づいて対応する前に、フル解像度のフレームと実行中のリグの数値を使って すべての指摘を検証します。
references/review.mdとtemplates/を参照してください。 - プロジェクトのルールに従ってリリースします。 テスト、ビルド、実際のスクリーンショットを含む変更履歴、プッシュ、サイズ確認、公開を行います。
workflow-ship-changeスキルを使用します。プッシュ済みでも未公開のリリースに問題がある場合は、追加コミットで修正してください。プレイヤーが一度も目にしていない変更のためにバージョンを追加してはいけません。 - 成果を見せます。 動画を求められた場合は、その動き固有のクロックに合わせて 30 fps でキャプチャし、Characters ページとゲーム内の映像を並べて表示します。実速度の後に 1/4 速度で再生します(
vidcompose.py+encode.swift)。
腕と手のルール
このリグには、ひねりや補正用のボーンがありません。これらの範囲を超えると、スキンが目に見えてねじれたり、つぶれたり、伸びたりします。実際のスキンメッシュ上で測定し、両方の身体について、すべての攻撃のすべてのフレームで範囲内に収めてください。
| ルール | 制限 |
|---|---|
| 肘の屈曲 | 10–152°。攻撃する腕または引き手の腕は、動作の中間80%を通して20°以上を保つ |
| 接触時のリーチ | 接触時、剣を持つ手は肩から腕の長さの60%以上の位置にあること(打ち込む方向へ伸ばし、ロックしない) |
| 手首 | 曲げは50°以下、回転は45°以下。剣を持つ手首は40°以下に制限し、弓を引く手はまっすぐに保つ |
| ひねり | 前腕の回転は52°以下、上腕の回転は52°以下 |
| 挙上 | 腕を下ろした状態から105°以下(これを超えると肩のスキンがつぶれる)。頭上への挙上は禁止 |
| スキン | 各腕または手の領域のエッジのうち、最悪の1%で、バインド状態に対する伸びは2倍以下、つぶれは3倍以下 |
| 手 | 常にポーズを取ること:柄を握る拳、弦に掛けるフック(セット→リリース→フォロースルー)、空手のときはリラックス。指を広げたり、かぎ爪の形にしたりしない |
| 軌道 | 手は肩に沿って動き、キー間では肩を中心に弧を描く。剣のキーは届く範囲内(前腕から25–115°)に保つ |
理由と遵守状況を確認するテストを含むルールの全文は、references/rules.md にあります。
効果があったテクニック
- 肩を基準にした手の位置と弧状補間。 突進する胴体によって肩が固定された手の目標位置まで押し込まれると腕がつぶれ、直線的な補間では途中で肘が閉じてしまいます。
- 手首ではなく前腕を狙う。 手首の角度に制限があるため、剣は前腕の回転で許される円錐上に着地します。剣の向きを変えるには、
fを変更します。 - 剣のキーはワールド空間で確認する。 胴体を約70°後ろにひねると、「剣を持つ肩の上」は頭の後ろを横切る方向を指します。構えの剣先を上向きに傾け、斜めに見えるようにしてください。
- フォロースルーを動かし続ける。
- 素早い斬撃:肘を曲げたまま、剣の軌道を保って、盾側の腰より下まで手を運びます。
- 強い斬撃:斜めに沈み込み、その後、肘をたたみながら跳ね返します。
- 剣先を垂らしたまま、敵に向けて腕を突き出して止めないでください。
- 弓を引く動作。 顎の横、あごの下で固定し、両方のカメラから手が見えるようにします。弓を引く肘は矢の6–8 cm下に置きます。腰を横向きにすると、肩をすくめたり肘のポールを使ったりするより、弓を引く側の肩のつぶれが改善しました。リリースの間もフックを保ち、その後、手を頭の周りではなく肩より前へ送り出します。
- 運動連鎖。 腰が胸部を導き、胸部が腕を導きます。弓の反動はリリースに応じるものであり、先行してはいけません。
それぞれラウンドを1回失う原因になった落とし穴
それぞれの症状 → 原因 → 修正方法は references/traps.md にあります。要点は次のとおりです。
- ボーンの軸。 HumGen の
headボーンは、前方が+Y、下方が+Zです。ボーンローカルのオフセットは、メッシュの目印(face.mjs)を使って確認してください。 - 失敗の見落とし。 最初に失敗したアサーションによって、同じテストループ内の後続の動作がすべて隠れます。また、最初に失敗した性別によって、もう一方の性別の結果も隠れます。
- カメラからの見え方。
- 首の横にある手は、ゲームカメラからは「頭の後ろ」に見えます。
- カメラに向いた剣は、「垂れ下がっている」ように見えます。
- 画面平面内で曲がった肘は、まっすぐに見えます。
- 批評者の見誤り。 サムネイルは批評者を惑わせます。何かを変更する前に、フル解像度のフレームとライブリグを確認してください。
- キャプチャ時の落とし穴。
- キャプチャ実行中は
srcを編集しないでください。 location.reload()の後は、次のスクリプトを評価する前に待ってください。- 手動でフレームを進めても FPS の測定にはなりません。
- キャプチャ実行中は
レポート
動作の何を変更したか、また変更がライブかどうかを最初に述べてください。続いて、次の内容を示してください。
- スコア表:変更前 → 変更後、2人の批評者のうち低い方、サーフェスごと。
- A/B の結果。
- 未解決の不具合をフレーム名とともに列挙。
- 追加したテスト。
- ファイルとプッシュのサイズ。
スコアが目標に届かない場合は、そのことと理由を明確に述べてください。
コメント
Markdown 対応