概要
Godotでプレイヤーや敵キャラクターを作成する際、多くの人が最初に使うであろうノードがCharacterBody2Dです。このノードは物理演算に基づいた便利な移動関数move_and_slide()を提供してくれますが、その挙動を大きく左右する重要なプロパティが「Motion Mode」です。
Motion Modeには主にGroundedとFloatingの2種類があり、これらを正しく使い分けることで、作りたいゲームの種類に合わせた最適なキャラクター挙動を簡単に実現できます。
この記事では、CharacterBody2DのMotion Modeの違いと、それぞれのモードがどのようなゲームに適しているかを解説します。
Motion Modeとは?
Motion Modeは、CharacterBody2Dが物理空間内でどのように振る舞うか、特に「床」や「壁」をどのように解釈するかを決定する設定です。インスペクタのCharacterBody2Dプロパティから設定できます。
| モード (Mode) | 主な特徴 | 最適なゲームタイプ |
|---|---|---|
| Grounded | (接地モード) 重力の影響を受け、床や壁、天井を認識します。is_on_floor()などの便利な関数が使えます。 | 横スクロールプラットフォーマー、アクションゲーム |
| Floating | (浮遊モード) 重力の影響を無視し、床という概念がありません。あらゆる方向からの衝突を等しく扱います。 | トップダウン(見下ろし型) のアクション、シューティング、RPG |
Grounded Mode: 横スクロールゲームの王道
GroundedはCharacterBody2Dのデフォルトモードであり、その名の通り「地面に足がついた」キャラクターの挙動を想定しています。
特徴:
- 重力が基本: プロジェクト設定で定義された重力が自動的にキャラクターに影響します。
- 床判定:
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モードは、キャラクターが宇宙船や幽霊のように空中を自由に漂う挙動を想定しています。
特徴:
- 重力は無関係: このモードでは、重力は自動的に適用されません。キャラクターは
velocityがVector2.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開発ライフを送りましょう。