はじめに
2Dゲームを作るとき、主人公は動きますが、地面や壁、障害物は動きませんよね。こうした「動かない物理オブジェクト」を実装するのがStaticBody2Dです。
この記事では、以下を学べます:
- StaticBody2Dとはどういうノードか
- 地面・壁・障害物の作り方
- コンベアベルトなど特殊な使い方
- 物理演算との連携

StaticBody2Dとは?
StaticBody2Dは、シーンに配置された「動かない」2D物理ボディです。
ゲームの壁や地面、岩などの「ぶつかることはできるが動かされない物体」を実装するのに最適なノードです。
継承ツリー:
StaticBody2D
↑
PhysicsBody2D
↑
CollisionObject2D
↑
Node2D
↑
Node
↑
Object
StaticBody2Dを使うには、必ず子ノードにCollisionShape2Dを配置して、当たり判定の形状(矩形・円形など)を設定します。
このノードを使うべき場面
使う場面:
- ゲームの地面や床
- 壁や障害物(プレイヤーが押して動かせない)
- 動かない足場やプラットフォーム
- コンベアベルト(velocity設定で動く床のような効果)
- 一方通行の壁や仕掛け
使わない場面:
- 敵や動く物体 → CharacterBody2DやRigidBody2Dを使う
- プレイヤーキャラクター → CharacterBody2Dを使う
主なプロパティと機能
| プロパティ名 | 型 | 説明 |
|---|---|---|
constant_linear_velocity |
Vector2 | 物理演算上、常に一定の速度で動いているとみなす。コンベアベルトの実装に使う |
constant_angular_velocity |
float | 常に一定の角速度で回転しているとみなす |
collision_layer |
int | このボディがどのレイヤーに属するか(1〜32層から選択) |
collision_mask |
int | このボディが衝突判定の対象とするレイヤー |
physics_material_override |
PhysicsMaterial | 摩擦係数や反発係数を設定 |
コード例1:地面と壁の設置
extends StaticBody2D
func _ready():
# StaticBody2Dは自動的に静止状態を保つ
# CollisionShape2Dを子ノードに追加すること
pass
# スクリプトはほぼ不要。配置して形状を決めるだけ
コード例2:コンベアベルトの実装
extends StaticBody2D
@export var conveyor_speed: float = 200.0
func _ready():
# 右方向に移動するコンベアベルト
constant_linear_velocity = Vector2(conveyor_speed, 0)
func _process(_delta):
# 動的に速度を変更する場合
constant_linear_velocity = Vector2(conveyor_speed, 0)

もっと使いこなす:カスタマイズできるパラメータ
| パラメータ | 設定値の例 | 用途 |
|---|---|---|
constant_linear_velocity |
Vector2(200, 0) |
毎フレーム右へ200ピクセル分のベロシティを持つ(ただしBody自体は移動しない) |
constant_angular_velocity |
2.0(ラジアン/秒) |
回転する障害物や装置の実装 |
physics_material_override.friction |
0.5〜1.0 |
床の滑りやすさ。大きいほど滑りにくい |
physics_material_override.bounce |
0.0〜1.0 |
ボールが当たったときの反発力 |
collision_layer |
1, 2, 4, 8, … (2のべき乗) | このオブジェクトがどのレイヤーに属するか |
まとめ
一言要約:StaticBody2Dは、動かない物理オブジェクト(地面・壁・障害物)を簡単に実装できるノードです。
ポイント:
- CollisionShape2Dを子ノードに追加して形状を定義する
- constant_linear_velocityで「動いているような」効果(コンベアベルト)を作れる
- collision_layer/maskで、どのオブジェクトと衝突するかを制御する
次回予告:次はTileMapLayerを解説します。多数のタイルを効率的に敷き詰めて2Dステージを構築する方法が分かります。
シリーズ:Godot 4 ノード解説
- 001-040: 基本ノード(準備中)
- 041:StaticBody2D
- 042:TileMapLayer
- 043:AnimationPlayer
- 044:AnimationTree
- 045:AudioStreamPlayer
- 046:AudioStreamPlayer2D
- 047:GPUParticles2D
- 048:CPUParticles2D
- 049:Line2D
- 050:CanvasLayer
この記事はGodot 4.xをもとに執筆しています。


コメント