fps-shooter について
一人称シューティングを開発する人向けの設計スキルです。照準と射撃のループ、射撃方式、武器の感触、戦闘システムに加え、キルタイムや反動、弾の拡散の調整を扱います。
主な機能
- 01一人称コントローラーとカメラ
- 02ヒットスキャンと弾丸の射出
- 03武器、弾薬、リロード
- 04敵 AI と戦闘フィードバック
- 05キルタイム、反動、拡散の調整
活用シーン
- 01アリーナ型やタクティカル FPS の企画
- 02ヒットスキャンか弾丸方式かの選択
- 03武器の殺傷力と反動の調整
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ gamedev-skills/ awesome-gamedev-agent-skills --skill fps-shooterインストール後、Claude Code で/fps-shooterを入力して読み込まれたか確認します。
同梱ファイルreferences/shooting-and-feel.md
詳細
FPS シューティング
FPS向けのプレイブックです。視点・移動コントローラー、射撃モデル、武器の感触、戦闘を扱います。これは組み合わせ型のスキルで、3Dコントローラー、入力、AIをシューティングゲームとして統合します。3Dノードやレイキャストを改めて説明するものではありません。射撃モデルと、銃の感触を左右する調整項目(TTK、反動、拡散)を定義します。
使用する場面
- 中心となる動作が狙って撃つ一人称視点のゲームを作る場合に使用します。アリーナシューター、タクティカルFPS、PvEシューター、ブーマーシューターなどが該当します。
- ヒットスキャンと弾体のどちらを使うか、キルまでの時間、反動、拡散、照準の感触を調整する場合に使用します。
使用しない場面: 三人称視点/2Dの射撃では、この射撃モデルを再利用しつつ、該当ジャンルに合わせてカメラ/コントローラーを構築してください。タワーを使ったウェーブサバイバルには、tower-defenseを使用してください。カメラ/キャラクター本体には、godot-3d-essentials/unreal-cpp-gameplayを使用してください。
コアループ
周囲を確認 → 標的を捉える → 狙って撃つ → キルを確認する(フィードバック) → 位置を変える/リロードする/前進する。 ゲーム体験全体は、狙って撃つというマイクロループの切れ味にかかっています。視点操作の応答性、明確な命中フィードバック、即座にわかる死亡演出が重要です。
必須システム
- 一人称視点コントローラー — 移動(WASD/スティック)、マウス/スティックでの視点操作、重力、ジャンプ/しゃがみ。
- カメラ — 目線の高さからの視点、設定可能なFOVと感度、反動による視点の跳ね上がり。
- 射撃モデル — ヒットスキャンのレイキャストおよび/または弾体の生成。フィードバックには一貫した命中処理を使用します。
- 武器+弾薬 — ダメージ、連射速度、マガジン、リロード、武器切り替え。
- 体力+ダメージ — HP、命中/ヘッドショット倍率、死亡処理。プレイヤーと敵で同じモデルを使用します。
- 敵AI — 認知 → 警戒 → 攻撃 → 捜索。遮蔽物と反応遅延を扱います(
game-ai)。 - フィードバック — ヒットマーカー、着弾デカール/パーティクル、命中音、画面の揺れ、キル確認。
- 目標 — 撃つ以外に何をするか:制圧、占領、生き残る、護衛。
設計項目
| 項目 | 効果 | 妥当なデフォルト |
|---|---|---|
| キルまでの時間(TTK) | 致死性、許容度 | ダメージ × 連射速度 × HPをまとめて調整します(参考資料)。 |
| ヒットスキャンと弾体のどちらを使うか | 必要な照準スキル | ヒットスキャン=素早く照準を合わせる。弾体=先読み/回避。 |
| ダメージ減衰 | 射程制限 | 約20 mまでは最大ダメージ、約60 mで最低値。 |
| ヘッドショット倍率 | スキルへの報酬 | 約1.5~2.0倍。 |
| 反動パターン | 習得可能な反動 | 完全なランダムより固定パターンが適しています。 |
| 拡散(ブルーム) | レーザーのような精度を抑制 | 初弾は正確にし、撃ち続けると拡散が大きくなります。 |
| 連射速度/マガジン/リロード | リズム、行動できない時間 | リロード中は隙が生まれます。 |
| マウス感度/FOV | 快適さ、視認性 | どちらも必ずオプションとして設定できるようにします。 |
| エイムアシスト(ゲームパッド) | コントローラー操作との公平性 | 標的の近くで吸着/減速させます。 |
パターン
1. ヒットスキャン射撃(即時判定のレイ。基本となる方式)
# Pseudocode. Cast from the camera; first hit takes damage scaled by range + headshot.
direction = apply_spread(camera.forward, current_spread)
hit = raycast(camera.world_position, direction, max_dist=RANGE, mask=SHOOTABLE)
if hit:
dmg = base_damage * falloff(hit.distance)
if hit.is_head: dmg *= HEADSHOT_MULT
hit.actor.take_damage(dmg)
spawn_impact_fx(hit.point, hit.normal) # decal + sound + hitmarker
2. 弾体射撃(回避でき、標的の先を狙う)
# Pseudocode. Spawn a moving body; it deals damage on its own collision.
p = spawn(projectile_scene, at=muzzle.world_position)
p.velocity = camera.forward * PROJECTILE_SPEED
p.on_hit = lambda other, point: (other.take_damage(base_damage), explode_fx(point))
p.lifetime = RANGE / PROJECTILE_SPEED # despawn so shots don't live forever
3. キルまでの時間(3要素をまとめて調整)
# Pseudocode. TTK falls out of HP, per-shot damage, and fire rate — tune as one system.
shots_to_kill = ceil(target_hp / damage_per_shot)
ttk_seconds = (shots_to_kill - 1) / fire_rate_per_second # first shot at t=0
注意点/失敗パターン
- 視点操作がフレームレートに連動している、または
dtでスケーリングされていない → FPSによって感度が変わります。視点操作にはマウスの生の移動量を使い、移動の積分にはdtを使用してください(physics-tuningを参照)。 - 反動/拡散が完全にランダム → 操作不能で不公平に感じられます。習得できる反動パターンを使い、初弾は正確にしてください。
- 減衰のないヒットスキャン → ピストルでマップの端から端まで狙撃できてしまいます。距離に応じたダメージ減衰を追加してください。
- 命中フィードバックがない → プレイヤーは弾が当たったか判断できません。必ずヒットマーカー、着弾エフェクト、明確なキル確認を表示してください。
- TTKの不整合 → 短すぎるとせわしなく不公平に感じられ、長すぎると敵が硬く感じられます。ダメージ、連射速度、HPをひとつのシステムとして調整してください(パターン3)。
- マルチプレイヤーでクライアントを信用する → 不正行為や「自分が先に撃った」という争いにつながります。権限はサーバー側に置き、ラグ補償を使用し(参考資料)、ネットコードの実装はエンジンのマルチプレイヤースキルに任せてください。
- FOV/感度の設定がない → 酔いやすさやアクセシビリティの問題につながります。必ず設定できるようにしてください。
構成(スキルから構築する)
- コントローラーとカメラ:
godot-3d-essentials(Godot)、またはunreal-cpp-gameplay/unreal-blueprintsを使います。Unity ではunity-physicsとキャラクターコントローラーを使います。 - 入力: 視点操作/移動、キーの再割り当て、ゲームパッドのエイムアシストには、
input-systems(またはunreal-enhanced-input)を使います。 - 射撃物理: レイキャストと投射物の衝突には、
godot-physics/unity-physicsを使います。 - 敵:
game-aiと、unity-navmesh/unreal-behavior-trees/ Godot のナビゲーションを組み合わせます。 - カメラと操作感: FOV/反動による揺れや視点操作のスムージングには
camera-systemsを、ヒットストップ、画面の揺れ、インパクトの演出にはgame-feelを使います。 - 仕上げ: 武器音/衝撃音には
audio-designを、マズルフラッシュ/衝撃の VFX にはshader-programmingを使います。 - 開発プロセス: コンテンツを作る前にエイムの操作感を検証するには、
prototype-fastを使います。
参考資料
- ヒットスキャンと投射物のトレードオフ、ダメージ減衰、反動/拡散、TTK の計算、ヒット判定/ラグ補償、敵 AI の状態については、
references/shooting-and-feel.mdを参照してください。
コメント
Markdown 対応