【Godot】CharacterBody2DのMotion Mode:トップダウンと横スクロールの使い分け

作成: 2025-06-20最終更新: 2025-12-06

見下ろし型と横スクロールゲームで物理挙動を切り替える方法。重力の有無と床判定の違い

概要

Godotでプレイヤーや敵キャラクターを作成する際、多くの人が最初に使うであろうノードがCharacterBody2Dです。このノードは物理演算に基づいた便利な移動関数move_and_slide()を提供してくれますが、その挙動を大きく左右する重要なプロパティが「Motion Mode」です。

Motion Modeには主にGroundedFloatingの2種類があり、これらを正しく使い分けることで、作りたいゲームの種類に合わせた最適なキャラクター挙動を簡単に実現できます。

この記事では、CharacterBody2DのMotion Modeの違いと、それぞれのモードがどのようなゲームに適しているかを解説します。

Motion Modeとは?

Motion Modeは、CharacterBody2Dが物理空間内でどのように振る舞うか、特に「床」や「壁」をどのように解釈するかを決定する設定です。インスペクタのCharacterBody2Dプロパティから設定できます。

モード (Mode)主な特徴最適なゲームタイプ
Grounded(接地モード) 重力の影響を受け、床や壁、天井を認識します。is_on_floor()などの便利な関数が使えます。横スクロールプラットフォーマー、アクションゲーム
Floating(浮遊モード) 重力の影響を無視し、床という概念がありません。あらゆる方向からの衝突を等しく扱います。トップダウン(見下ろし型) のアクション、シューティング、RPG

Grounded Mode: 横スクロールゲームの王道

GroundedCharacterBody2Dのデフォルトモードであり、その名の通り「地面に足がついた」キャラクターの挙動を想定しています。

特徴:

  • 重力が基本: プロジェクト設定で定義された重力が自動的にキャラクターに影響します。
  • 床判定: is_on_floor()関数が使用でき、キャラクターが地面に接しているかどうかを簡単に判定できます。これにより、空中での多段ジャンプを防ぐといった制御が容易になります。
  • 坂道にも対応: move_and_slide()が自動的に坂道を滑らかに上り下りするように調整してくれます。

このモードは、マリオのような横スクロールアクションや、重力が重要な役割を果たすほとんどの2Dゲームにとって最適な選択です。

# Grounded Modeでの典型的なコード
func _physics_process(delta):
    # 重力を加える
    if not is_on_floor():
        velocity.y += gravity * delta

    # ジャンプ
    if Input.is_action_just_pressed("jump") and is_on_floor():
        velocity.y = JUMP_VELOCITY

    # ...移動処理...
    move_and_slide()

Floating Mode: トップダウンゲームの相棒

一方、Floatingモードは、キャラクターが宇宙船や幽霊のように空中を自由に漂う挙動を想定しています。

特徴:

  • 重力は無関係: このモードでは、重力は自動的に適用されません。キャラクターはvelocityVector2.ZEROであればその場に静止します。
  • 床の概念なし: is_on_floor()は常にfalseを返します。全ての衝突は単なる「壁」との衝突として扱われます。
  • 全方向への移動: 上下左右、どの方向にも同じように移動するロジックに適しています。

ゼルダの伝説のようなトップダウンのRPGや、全方位シューティングゲーム(Twin-stick shooter)など、キャラクターが地面に縛られずにマップを自由に動き回るゲームに最適です。

# Floating Modeでの典型的なコード
func _physics_process(delta):
    # 入力から移動方向を決定
    var direction = Input.get_vector("move_left", "move_right", "move_up", "move_down")
    velocity = direction * SPEED

    # ...その他の処理...
    move_and_slide()

Groundedモードのコードにあった重力やis_on_floor()のチェックが不要になり、非常にシンプルになっていることが分かります。

まとめ

CharacterBody2DのMotion Modeは、ゲームのジャンルに合わせてキャラクターの物理挙動の土台を切り替えるための重要な設定です。

  • 横スクロールプラットフォーマー を作るなら → Grounded Mode
  • トップダウンRPGシューティング を作るなら → Floating Mode

最初にこの設定を正しく行うことで、その後のキャラクター移動に関するコーディングが格段にスムーズになります。あなたの作りたいゲームに最適なモードを選んで、快適なGodot開発ライフを送りましょう。