Godot Engineで2Dゲームを制作するための備忘録です。
この記事はGeminiを活用して作成しました。
はじめに
Godot 4.6を使って、ゲーム作成の第一歩となる「重力で落下したボールが床で跳ね返る(バウンドする)」仕組みを作成します。
スクリプト(コード)は一切書かずに、Godotのノード機能と物理エンジンのみで実装できます。
開発環境
- Engine: Godot Engine v4.6 日本語
- Mode: 2D
STEP 1: シーンとノードの構築
まずは2Dシーンを作成し、物理演算に必要なノードを配置します。
- 画面左上の「シーン」タブから「2Dシーン」(
Node2D)を選択し、ノード名をMainに変更します - 以下の階層構造になるようにノードを追加・配置します
Main (Node2D)
├── Ground (StaticBody2D)
│ ├── CollisionShape2D
│ └── ColorRect
└── Ball (RigidBody2D)
├── CollisionShape2D
└── ColorRect
使用するノードの解説
-
StaticBody2D(Ground): 動かない物体(床や壁)に使用します -
RigidBody2D(Ball): 重力や衝突などの物理影響を自動で受ける物体に使用します -
CollisionShape2D: 物理的な「当たり判定(形状)」を定義します -
ColorRect: 単色の矩形を描画して見た目を付けます
STEP 2: 床(Ground)の設定
床を作成し、画面の下部に配置します
-
Ground(StaticBody2D) を選択、床を適当な場所に配置します- インスペクター > Transform > Position:
(X: 576, Y: 550)
- インスペクター > Transform > Position:
-
ColorRect(見た目)を選択、床の見た目の大きさを設定します- インスペクター > Layout > Custom Minimum Size:
(X: 800, Y: 40) - インスペクター > Transform > Position:
(X: -400, Y: -20)(※原点を中央に合わせるため)
- インスペクター > Layout > Custom Minimum Size:
-
CollisionShape2D(当たり判定)を選択、床と同じ大きさに設定します- インスペクター > Shape: 「新規 RectangleShape2D」を選択
- 作成された
RectangleShape2Dの Size:(X: 800, Y: 40)
STEP 3: ボール(Ball)とバウンド(物理材質)の設定
落下させるボールを作成し、跳ね返りの設定(PhysicsMaterial)を追加します。
1. ノードの設定
-
Ball(RigidBody2D) を選択、ボールを適当な場所に配置します- インスペクター > Transform > Position:
(X: 576, Y: 150)(空中へ配置)
- インスペクター > Transform > Position:
-
ColorRect(見た目)を選択、見た目の大きさ、親からの場所を設定します- インスペクター > Layout > Custom Minimum Size:
(X: 40, Y: 40) - インスペクター > Transform > Position:
(X: -20, Y: -20)
- インスペクター > Layout > Custom Minimum Size:
-
CollisionShape2D(当たり判定)を選択、当たり判定の大きさ設定します(半径20)- インスペクター > Shape: 「新規 CircleShape2D」を選択
- 作成された
CircleShape2Dをクリックして Radiusを20にします
2. 跳ね返り(バウンド)の設定
-
Ballノードを選択します - インスペクター内の Physics Material Override(物理材質オーバーライド)の項目で「空」をクリックし、「新規 PhysicsMaterial」を作成します
- 作成された
PhysicsMaterialをクリックして詳細を開きます -
Bounce(弾力) の値を
0.8に設定します。(0.0で一切跳ねず、1.0で完全弾性衝突になります)
STEP 4: 実行確認
- キーボードの
F5キーを押すか、画面右上の「プロジェクトを実行」ボタンを押します - メインシーンが未設定の場合は「現在のシーンを選択」を選び、
main.tscnとして保存します
実行すると、ボールが重力に従って落下し、床に当たって心地よくバウンドする動作が確認できます!
STEP 5: 減衰ゼロ設定
永遠に同じ高さでバウンドし続けるを実現するために設定した項目の一覧です
1.ボール(Ball: RigidBody2D)の設定
インスペクター画面にて設定します
- Linear > Damp Mode: Replace(全体設定を加算させず上書き)
- Linear > Damp: 0(個別の空気抵抗をゼロ)
- Angular > Damp Mode: Replace(回転抵抗を上書き)
- Angular > Damp: 0(個別の回転抵抗をゼロ)
- Deactivation > Lock Rotation: オン(バウンド時の斜め回転によるエネルギー分散を防止)
2.物理材質(PhysicsMaterial)の設定
Ball および Ground の Physics Material Override 内で設定します
- Bounce(弾力): 1.0(完全弾性衝突:跳ね返り時の減衰ゼロ)
- Friction(摩擦): 0(接触時の摩擦損失ゼロ)
まとめ
Godot 4.6では、RigidBody2D と PhysicsMaterial を組み合わせるだけで、プログラミングを行わずにリアルな物理挙動(落下・衝突・バウンド)を簡単に再現できます。
ここからさらにプレイヤーの入力を受け付けたり、スコア判定を追加したりしてゲームへと拡張していきましょう!