godot-genre-platformer について
Godotでのプラットフォームゲーム開発向けスキルガイドです。移動、レベル設計、演出のスクリプトと実践ルールを扱い、ジャンプの感触、カメラ処理、物理の注意点に重点を置いています。
主な機能
- 01キャラクター移動コントローラーとモジュール
- 02コヨーテタイム、ジャンプバッファ、可変ジャンプ
- 03移動プラットフォーム、衝突、高速移動の処理
- 04カメラ、アニメーション、演出用スクリプト
- 05レベル進行とプラットフォーマー設計の原則
活用シーン
- 01精密なジャンプ向けに応答性を調整
- 02動く足場や一方向足場を構築
- 03着地点を見やすくするカメラ調整
- 04レベルのテンポとチェックポイントを計画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ thedivergentai/ game-dev-agentic-skills --skill godot-genre-platformerインストール後、Claude Code で/godot-genre-platformerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/migration-notes.mdplatformer-movement-deep.mdscripts/advanced_platformer_controller.gdcheckpoint.gdcoyote_timer.gdcustom_collision_slider.gdfast_projectile_ccd.gdgame_feel_helper.gdjump_buffer.gdledge_grab_sensor.gdone_way_drop_handler.gdplatformer_animation_sync.gdplatformer_camera.gdplatformer_controller_2d.gdplayer_ground_controller.gdspeed_trail.gdsynchronized_platform.gdvariable_jump.gdwall_slide_sensor.gd詳細
絶対に行わないこと(熟練者向けのアンチパターン)
物理挙動と操作感
move_and_slide()の前に、速度にdeltaを掛けてはいけません。このメソッドは時間刻みを内部で処理します。- コヨーテタイム(約 0.1s)を省略してはいけません。この猶予期間がないと、足場から落ちたときにジャンプの反応が悪く感じられます。
- ジャンプバッファリング(約 0.15s)を無視してはいけません。ボタンを早めに押していた場合、プレイヤーは地面に触れた瞬間にジャンプできることを期待します。
- ジャンプの高さを固定にしてはいけません。プレイヤーの操作表現を可能にするため、必ず可変ジャンプ高(ボタンを離したときに速度を抑える)を実装してください。
- 速度に加算する前に、重力に
deltaを掛け忘れてはいけません。重力は加速度であり、フレームレートに依存しないようにする必要があります。 - 高速移動に離散的な衝突判定を使ってはいけません。ジオメトリをすり抜けないよう、必ず
CCD_MODE_CAST_RAYを使用してください。 - 通常の移動に
move_and_collide()を使ってはいけません。move_and_slide()のような坂や階段への対応がありません。 - コヨーテタイムやバッファのタイマーを、厳密な等価演算子(== 0.0)で確認してはいけません。必ず
is_equal_approx()または>= 0.0を使用してください。
仕上げとレベルデザイン
- カメラのスナップに線形補間を使ってはいけません。乗り物酔いを防ぐため、必ずカメラのスムージングまたは
lerp()を使用してください。 - ジャンプや着地時のスクワッシュ&ストレッチを省略してはいけません。こうした繊細な視覚的「気持ちよさ」の演出がないと、移動が軽く感じられます。
- ブラインドジャンプを作ってはいけません。着地地点が見えるよう、必ずカメラの先読みやズームのトリガーを使ってください。
- レベルのジオメトリに個々の
Sprite2Dノードを使ってはいけません。最適化された衝突判定と描画のため、必ずTileMapLayerを使用してください。 - プレイヤーに複雑な凹型の
CollisionShape2Dを使ってはいけません。安定性を確保するため、必ずプリミティブ形状(カプセル/長方形)を優先してください。
アーキテクチャとパフォーマンス
- 単純な動くプラットフォームに
CharacterBody2Dを使ってはいけません。必ずAnimatableBody2Dを使い、sync_to_physicsを有効にしてください。 - 降下するプラットフォームで
platform_on_leaveを無視してはいけません。ジャンプの勢いを維持するため、PLATFORM_ON_LEAVE_ADD_UPWARD_VELOCITYを使用してください。 - プレイヤーキャラクターの
recovery_as_collisionを無効にしてはいけません。正しい床スナップの検出結果を得るために必要です。 - AnimationTree の式で
!(NOT)演算子を使ってはいけません。必ずis_walking == falseを使用してください。 - 頻繁な状態確認に標準の String を使ってはいけません。必ず
StringName(例:&"jumping")を使用してください。 - 重いレベルのチャンクを同期的に読み込んではいけません。フレームのカクつきを防ぐため、必ず
ResourceLoader.load_threaded_request()を使用してください。
利用可能なスクリプト
必須:操作感を調整するときは、コントローラーとモジュールを読んでください。コヨーテタイム、バッファ、可変ジャンプをインラインで再実装してはいけません。
コントローラー(推奨の基本ルート)
- advanced_platformer_controller.gd — 精密なジャンプ/走行コントローラーを扱う前に必ず確認してください。
- platformer_controller_2d.gd — 高度な構成が過剰な場合に使える、シンプルな CharacterBody2D のベースラインです。
- player_ground_controller.gd — 床上の一定速度と、坂でのスナップ調整を提供します。
移動モジュール
- coyote_timer.gd — ジャンプの操作感を調整するときに必須です(または統合済みの高度なコントローラーを使用してください)。
- jump_buffer.gd — 着地時の反応を良くするため、コヨーテタイムと併せて必須です。
- variable_jump.gd — ボタンを離したときの高さ調整に必須です。
- wall_slide_sensor.gd — ノードを使わない壁検出です。
- ledge_grab_sensor.gd — 形状クエリによる縁つかみです。
- one_way_drop_handler.gd — すり抜け/一方向プラットフォームの入力を扱う前に必須です。
- custom_collision_slider.gd — フレーム間の高速なスライド応答です。
ワールド/カメラ/仕上げ
- synchronized_platform.gd —
sync_to_physicsを使う AnimatableBody2D のプラットフォームです。 - fast_projectile_ccd.gd — すり抜けを防ぐ CCD です。
- platformer_animation_sync.gd — ブール値に安全な AnimationTree の同期です。
- platformer_camera.gd — 先読み/スムージング(
godot-camera-systemsと組み合わせてください)。 - game_feel_helper.gd — ビジュアルノードに Tween によるスクワッシュ/ストレッチを適用します(ピボットは足元)。
- speed_trail.gd — ダッシュ/走行の勢いを演出する GPUParticles の軌跡を切り替えます。
- checkpoint.gd — Area2D のチェックポイント ID と SaveManager の位置フックです。
コアループ
ジャンプ → 障害物を進む → ゴールに到達 → 次のレベル
スキルチェーン
godot-project-foundations, godot-characterbody-2d, godot-input-handling, godot-2d-animation, godot-audio-systems, godot-tilemap-mastery, godot-camera-systems, godot-monte-carlo-balancer
操作感 — 調整項目(チュートリアルではありません)
必ず読むこと:advanced_platformer_controller.gd と coyote_timer.gd/jump_buffer.gd/variable_jump.gd を読んでください。これらのモジュールをコピーしてください。コヨーテタイムやジャンプバッファのレシピをここに貼り付けないでください。
スクリプトを読んだ後、プロジェクトコードでは次の項目だけを調整してください。
| 調整項目 | エキスパート向けのデフォルト値/注記 |
|---|---|
| コヨーテタイム | 約0.1秒 — これがないと、足場の端からのジャンプが不自然に感じられます |
| ジャンプバッファ | 約0.15秒 — 早めに押したボタンもジャンプとして反映される必要があります |
| 可変ジャンプ | ボタンを離したときに上昇速度をカットします |
| 頂点/落下時の重力 | 頂点を過ぎた後の落下倍率を高くすると、着地がキビキビします |
| CCD | 高速の弾丸/ダッシュにはキャストレイ CCD を有効にします |
| 動くプラットフォーム | AnimatableBody2D と sync_to_physics を使い、platform_on_leave を設定します |
| すり抜け床 | one_way_drop_handler.gd — 場当たり的な無効化ではなく、マスク/レイヤーを使います |
地上では、方向転換に即座に反応させます。空中では、加速をやや弱めます。重力は delta でスケーリングし、move_and_slide() の前に velocity *= delta を実行しないでください。
レベルデザインの原則
「教える三部作」
- 導入 — 安全に学ぶ → 2. 挑戦 — 中程度のリスク → 3. ひねり — 組み合わせ/時間制限
流れとペース配分
簡単 → 簡単 → 中程度 → チェックポイント → 中程度 → 難しい → チェックポイント → ボス
カメラ
先読みには platformer_camera.gd/関連する godot-camera-systems を使い、先が見えないジャンプは避けてください。
プラットフォーマーのサブジャンル
- 精密操作型(Celeste/Super Meat Boy)— 即時リスポーン、シビアな操作、頻繁なチェックポイント
- 収集型 — ハブワールド、能力のアンロック、引き返し
- パズル型 — ゆったりしたペース、環境の物理法則
- メトロイドヴァニア —
godot-genre-metroidvaniaへのルート
よくある落とし穴
| 落とし穴 | 解決策 |
|---|---|
| ふわふわしたジャンプ | 頂点を過ぎた後の落下重力を強くします |
| 着地位置が不正確 | コヨーテタイム+バッファモジュール+着地の演出 |
| 不公平な死亡 | 接触前に危険を予告します |
| 先が見えないジャンプ | 先読みカメラ/ズームトリガー |
| 中盤が退屈 | 2~3レベルごとに新しいメカニクスを導入します |
仕上げのチェックリスト
- 着地/走行時の砂ぼこりパーティクル
- 強い着地時の画面シェイク(
godot-camera-systemsのトラウマ) - ジャンプ/着地時のスクワッシュ/ストレッチ(ビジュアルのピボットは足元)
- ジャンプ/着地/壁滑りの効果音
- チェックポイントの視覚/音声フィードバック
- アシストモード/キー割り当ての変更
必ず読むこと:意思決定ツリーやスクリプト一覧を超える内容については、platformer-movement-deep.md を参照してください。初回の配線時には読み込まないでください。まず同梱の
scripts/を使ってください。
Godot 固有のヒント
- CharacterBody2D と RigidBody2D:プラットフォーマーのキャラクターには必ず
CharacterBody2Dを使用してください。精密な操作が欠かせません - 物理演算のティックレート:より滑らかな動きのために、物理演算を 120Hz にすることを検討してください
- 一方向プラットフォーム:
set_collision_mask_value()または専用のコリジョンレイヤーを使用してください - 壁の検出:壁ジャンプには
is_on_wall()とget_wall_normal()を使用してください
参考ゲームの例
- Celeste - 優れたゲームフィール、アクセシビリティに配慮したアシストモード
- Hollow Knight - 戦闘とプラットフォームアクションの統合
- Super Mario Bros. Wonder - ビジュアルの作り込みと驚き
- Shovel Knight - 現代的な手触りのレトロなメカニクス
参考資料
段階的な情報開示:特定の API を調査するときにのみ公式ドキュメントのリンクを開いてください。関連スキルは、関連分野へ移るときに読み込んでください。関連するスキルの全体を事前に読み込む必要はありません。
公式ドキュメント
- CharacterBody2D の使用 — プラットフォーマーの操作感を左右する、move_and_slide の床/壁/天井の判定、斜面スナップ、platform_on_leave の動作について説明しています。
- CharacterBody2D — 精密なコントローラーのための floor_constant_speed、floor_snap_length、recovery_as_collision、モーションモードの設定項目について説明しています。
- 物理演算の概要 — プレイヤー、一方向プラットフォーム、危険物、飛び道具が意図せず重ならないようにするコリジョンレイヤー/マスクについて説明しています。
- コリジョン形状(2D) — 凹形状のジオメトリと比べて、カプセル形状や長方形のプレイヤー形状が安定する理由について説明しています。
- 2D 移動の概要 — CharacterBody と RigidBody のトレードオフ、および一般的な入力から速度へのパターンについて説明しています。
- TileMap の使用 — スプライトごとに StaticBody を設定する代わりに、レベルジオメトリに TileMapLayer のコリジョンを使用する方法について説明しています。
- TileSet の使用 — すり抜け可能なプラットフォーム向けに、タイルセットで一方向コリジョンと物理レイヤーを設定する方法について説明しています。
- AnimatableBody2D — 乗っているキャラクターがガタつかずに追従できる、sync_to_physics を設定した動くプラットフォームについて説明しています。
- Camera2D — 不意の落下や乗り物酔いを防ぐ、位置のスムージング、ドラッグマージン、先読みオフセットについて説明しています。
- AnimationTree の使用 — 安全でない式の否定を使わずに、待機/走行/空中の状態を切り替えるブール値の遷移条件について説明しています。
- レイキャスト — PhysicsDirectSpaceState2D を使った、ノードを必要としない壁滑りや縁の判定について説明しています。
- 入力の例 — ジャンプバッファーや可変ジャンプの高さ制御を支える、アクションの押下直後/解放直後を検出するパターンについて説明しています。
関連スキル
前提条件
- godot-project-foundations — コヨーテタイマーやバッファータイマーを接続する前に必要な、プロジェクト設定、入力マップのアクション、シーン構成について説明しています。
- godot-characterbody-2d — 精密なジャンプの基礎となる、move_and_slide による接地判定、斜面、壁の法線について説明しています。
- godot-input-handling — アシストモードのアクセシビリティに向けた、再割り当て可能なジャンプ/移動アクションと未処理入力のバッファリングについて説明しています。
補完
- godot-2d-physics — コントローラーのコア機能を超えた、レイヤー、CCD、Area2D の危険物、AnimatableBody の足場について説明します。
- godot-tilemap-mastery — 学習しやすいレベルの地形を作るための、TileMapLayer/TileSet の一方通行設定とコリジョンの描画について説明します。
- godot-camera-systems — 見当違いのジャンプを防ぎながら着地地点を見せる、先読み、部屋ごとのカメラ、スムージングについて説明します。
- godot-animation-tree-mastery — 演出を安全に組み込めるステートグラフのために、is_on_floor/velocity と同期する AnimationTree の条件について説明します。
- godot-2d-animation — 物理演算の確定後に重量感を表現する、スクワッシュ/ストレッチと着地/走行サイクルについて説明します。
- godot-particles — ジャンプ/着地イベントから呼び出す、砂ぼこりの軌跡と着地時の噴煙について説明します。
- godot-audio-systems — 操作への応答性を高める、ジャンプ/着地/壁滑りの効果音のタイミングについて説明します。
- godot-monte-carlo-balancer — アシストのデフォルト設定をリリースする前に、コヨーテタイム/ジャンプバッファー/重力/ジャンプのパラメーターと、レベルの難易度曲線をサンプリングします。
下流/利用側
- godot-genre-metroidvania — 精密な移動と TileMap の部屋を再利用する、能力によって開放される探索について説明します。
- godot-save-load-systems — 死亡時やシーン再読み込み時にチェックポイントの位置を保持する方法について説明します。
マスター
- godot-master — スキル間の検索に使う、ライブラリのルーター兼ミラー化されたモジュールのエントリーポイントです。