godot-genre-shooter-fps について
godot-genre-shooter-fpsは、一人称シューティングの操作と武器システムを構築するGodot向けスキルです。専用スクリプトとパターンで、視点、移動、物理クエリによるヒットスキャン、反動、武器データ、マルチプレイヤーの命中検証を扱います。
主な機能
- 01マウス視点操作とFPS移動
- 02物理クエリによるヒットスキャン判定
- 03カメラ反動、拡散、武器ボブ
- 04Resourceによる武器パラメーター管理
- 05サーバー権威型のダメージ検証
活用シーン
- 01FPSプレイヤーコントローラーの実装
- 02ヒットスキャン射撃と反動の構築
- 03武器の揺れとボブの追加
- 04マルチプレイヤー命中イベントの検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ thedivergentai/ game-dev-agentic-skills --skill godot-genre-shooter-fpsインストール後、Claude Code で/godot-genre-shooter-fpsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/fps-weapon-theory.mdmigration-notes.mdscripts/advanced_fps_controller.gdadvanced_weapon_controller.gdaim_assist.gdbullet_decal_spawner.gdfps_camera_look.gdfps_movement_logic.gdframe_perfect_input.gdhitscan_weapon_logic.gdhitscan_weapon_query.gdplayer_anim_bridge.gdprocedural_recoil_handler.gdrecoil_system.gdserver_projectile_instance.gdweapon_bobbing_system.gdweapon_spread_calc.gdweapon_state_machine.gd詳細
必読スクリプト(ここから開始)
- fps_camera_look.gd — 生の
_inputによるマウス視点操作(ヨー/ピッチ) - fps_movement_logic.gd — 加速/摩擦/空中制御
- hitscan_weapon_query.gd — space-stateによるヒットスキャン
- weapon_bobbing_system.gd — ビューモデルのボブ/スウェイ
その他:procedural_recoil_handler.gd、hitscan_weapon_logic.gd、advanced_fps_controller.gd、weapon_state_machine.gd、frame_perfect_input.gd、bullet_decal_spawner.gd、weapon_spread_calc.gd、server_projectile_instance.gd、player_anim_bridge.gd、recoil_system.gd(パターン+ブルーム)、aim_assist.gd(コントローラーの摩擦/磁力)。
advanced_weapon_controller.gdは共通理論です。FPSの操作感は上記のスクリプトで維持し、TPSへのジャンル振り分けには関連スキルを使用してください。
コアループ
移動/視点操作 → 照準 → 発射(ヒットスキャン) → リコイル回復 → 次の敵を捕捉
絶対にしないこと(FPS)
ガンプレイとヒット判定
- 絶対に
_processでヒット判定を行わないでください。_physics_process+intersect_rayを使用してください。 - 絶対に銃のメッシュだけにリコイルを適用しないでください。カメラ+ブルーム/拡散に反動を加えてください。
- 絶対にクライアントのダメージ申告を信頼しないでください。サーバー権限+ラグ補償を使用してください。
- 絶対にプレイヤーのRIDに対する
exclude/add_exceptionを忘れないでください。 - 絶対に浮動小数点のクールダウンに
==を使用しないでください。is_equal_approxを使用してください。
入力と移動
- 絶対に
_physics_processでマウス入力をポーリングしないでください。視点操作には_input/_unhandled_inputを使用してください。 - 絶対に生の
Transform3Dに視点操作を累積しないでください。ヨー/ピッチを浮動小数点数で保持してください。 - 絶対に
move_and_slide()の前に速度へdeltaを乗算しないでください。 - 絶対に銃口の前方方向に
Transform3D.looking_atを使用しないでください。-transform.basis.zを使用してください。
仕上げ
- 絶対に銃声に単一の
AudioStreamPlayerを使用しないでください。機械音+発射音+余韻を重ねてください。 - 絶対にデカールを残したままにしないでください。フェード/プールを使用してください(bullet_decal_spawner.gd)。
- 絶対に武器のステータスをハードコードしないでください。WeaponDataリソースを使用してください。
- 絶対に頻繁に使う武器の状態に通常のStringを使用しないでください。
StringNameを使用してください。
高度なFPS(維持)
ビューモデルのスウェイ/ボブ
プロシージャルなサイン波ボブ+視点操作によるスウェイ — weapon_bobbing_system.gd。
段差を上る処理
move_and_slide()の後にis_on_wall()が真なら、step_heightから前方/下方へレイを飛ばし、階段では段差の上まで持ち上げます。
戦術的な傾き
Input.get_axis("lean_left","lean_right")によるカメラのZ軸回転+ローカルXオフセットを、lerpで適用します。
共通の武器理論
FPSリグ固有ではないヒットスキャンと投射物の比較、スプレーパターン、ネットワーク予測の詳細については、godot-genre-shooterと戦闘/マルチプレイヤーの補完資料を参照してください。FPSの射撃処理は hitscan_weapon_query.gd+procedural_recoil_handler.gd+recoil_system.gdで実装してください。
必読:ヒットスキャン/投射物のトレードオフ、3層のリコイル、エイムアシスト、武器バランス表、クライアント予測については、fps-weapon-theory.mdを参照してください。ボブ/段差/傾きの範囲を超えて拡張する場合を除き、必読スクリプトを読んだ後に読み込まないでください。
参考資料
段階的な情報開示:特定のAPIを調査するときにのみ公式ドキュメントへのリンクを開いてください。関連スキルは同領域の別分野へ振り分けるときに読み込み、スキル群全体をあらかじめ読み込まないでください。
公式ドキュメント
- レイキャスト — Area3D の弾道計算を使わずにヒットスキャンを判定するための、PhysicsDirectSpaceState3D の
intersect_rayパターンです。 - 物理演算の概要 — 衝突レイヤー/マスク、プレイヤーを除外するためのレイヤー、銃撃処理における物理ティックと画面描画フレームの違いについて解説しています。
- 3D トランスフォームの使用 — エイム、リコイル、銃口の方向に使う基底軸と
-transform.basis.zの前方ベクトルについて解説しています。 - InputEvent の使用 — マウス視点操作の遅延をゼロに保ちながら、移動を物理演算に同期させるための
_inputと_physics_processの違いについて解説しています。 - マウスと入力座標 — エイム用レイの生成に使う相対マウス移動、キャプチャ、画面中心への投影について解説しています。
- コントローラー、ゲームパッド、ジョイスティック — エイムアシストの摩擦/吸着の基盤となるアナログ視点操作軸とデッドゾーンについて解説しています。
- デカールの使用 — 弾痕に Sprite3D/QuadMesh のシールではなく、Decal ノードによる投影を使用する方法について解説しています。
- ハイレベルマルチプレイヤー — 弾ごとの同期を行わずにサーバー検証付きヒットスキャンを実現するための、RPC の権限と射撃イベントのパターンについて解説しています。
- AnimationTree の使用 — 式に
!を使わずに、待機/エイム/射撃/リロードを切り替えるブレンド/ステートマシンについて解説しています。 - リソース — ハードコードされたクラス定数ではなく、WeaponData Resource に武器のステータス(ダメージ、リコイル、拡散)を定義する方法について解説しています。
- オーディオストリーム — 銃声に重みを持たせるための、機械音/射撃音/余韻のオーディオストリームのレイヤー化について解説しています。
- サーバーを使用した最適化 — SceneTree に大量のノードを追加せずに、多数の視覚効果用弾丸を扱うための RenderingServer RID パスについて解説しています。
関連スキル
前提条件
- godot-project-foundations — FPS コントローラーと WeaponData の接続に進む前に、シーンツリー、InputMap アクション、Resource のインポートの基本を学べます。
- godot-input-handling — フレーム単位で正確な射撃とカメラ視点操作の基盤となる、マウスキャプチャ、アクションのバッファリング、視点操作と移動の分離について学べます。
- godot-raycasting-queries — ヒットスキャン判定の基盤となる、物理演算に同期したレイ/シェイプクエリと RID の除外について学べます。
補完
- godot-camera-systems — プロシージャルなリコイルや武器の上下動と組み合わせられる、FOV の瞬間的な変化、傾きピボット、揺れのスタック。
- godot-combat-system — ヒットスキャン/弾丸の命中確認パスで共有される、ダックタイピングによるダメージ適用とヒットゾーン倍率。
- godot-audio-systems — 単一の AudioStreamPlayer を共有せずに銃声を重ねるための、バスルーティングとプールされた単発再生。
- godot-multiplayer-networking — 対戦ゲームでの命中判定に使う、権威サーバー方式の射撃 RPC と信頼性のない移動転送モード。
- godot-adapt-single-to-multiplayer — レイテンシ補償付きの射撃判定に先立って用意する、クライアント予測/サーバーリコンシリエーションの枠組み。
- godot-state-machine-advanced — 武器の状態を文字列で表現せずに、StringName で射撃/リロード/待機を管理するステートマシン。
- godot-animation-tree-mastery — ローカル速度ブリッジによって駆動する AnimationTree のパラメーターとブレンドスペース。
- godot-performance-optimization — 弾丸のビジュアルと着弾表現に用いる、プーリング、Decal の予算管理、RenderingServer RID の密度。
- godot-genre-shooter — プロジェクトが FPS を主軸としていない場合に使う、より幅広い TPS/ハイブリッドシューターのアーキテクチャ。
下流/利用側
- godot-monte-carlo-balancer — バランス調整表をリリースする前に、武器間の非対称性マトリクス、TTK 帯、ブルーム/リコイルの調整値をシミュレーションします。
- godot-genre-battle-royale — 大規模な関連性管理とレイテンシ補償付きの戦闘を扱い、BR の試合で FPS のヒットスキャン/リコイルの操作感を再利用します。
マスター
- godot-master — ライブラリのルーター兼ミラー化されたモジュールのエントリです。分野横断的な FPS の課題をどのドメインスキルが担当するか確認するときに開きます。