Godot入門:StaticBody2Dの使い方と活用法

Node解説

はじめに

2Dゲームを作るとき、主人公は動きますが、地面や壁、障害物は動きませんよね。こうした「動かない物理オブジェクト」を実装するのがStaticBody2Dです。

この記事では、以下を学べます:

  • StaticBody2Dとはどういうノードか
  • 地面・壁・障害物の作り方
  • コンベアベルトなど特殊な使い方
  • 物理演算との連携
StaticBody2Dの基本概念
StaticBody2Dは動かない物理オブジェクトを表現する

StaticBody2Dとは?

StaticBody2Dは、シーンに配置された「動かない」2D物理ボディです。

ゲームの壁や地面、岩などの「ぶつかることはできるが動かされない物体」を実装するのに最適なノードです。

継承ツリー:


StaticBody2D
  ↑
PhysicsBody2D
  ↑
CollisionObject2D
  ↑
Node2D
  ↑
Node
  ↑
Object

StaticBody2Dを使うには、必ず子ノードにCollisionShape2Dを配置して、当たり判定の形状(矩形・円形など)を設定します。

このノードを使うべき場面

使う場面:

  • ゲームの地面や床
  • 壁や障害物(プレイヤーが押して動かせない)
  • 動かない足場やプラットフォーム
  • コンベアベルト(velocity設定で動く床のような効果)
  • 一方通行の壁や仕掛け

使わない場面:

  • 敵や動く物体 → CharacterBody2DRigidBody2Dを使う
  • プレイヤーキャラクター → CharacterBody2Dを使う

主なプロパティと機能

プロパティ名説明
constant_linear_velocityVector2物理演算上、常に一定の速度で動いているとみなす。コンベアベルトの実装に使う
constant_angular_velocityfloat常に一定の角速度で回転しているとみなす
collision_layerintこのボディがどのレイヤーに属するか(1〜32層から選択)
collision_maskintこのボディが衝突判定の対象とするレイヤー
physics_material_overridePhysicsMaterial摩擦係数や反発係数を設定

コード例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)
StaticBody2Dのプロパティパネル
インスペクターでプロパティを調整する

もっと使いこなす:カスタマイズできるパラメータ

パラメータ設定値の例用途
constant_linear_velocityVector2(200, 0)毎フレーム右へ200ピクセル分のベロシティを持つ(ただしBody自体は移動しない)
constant_angular_velocity2.0(ラジアン/秒)回転する障害物や装置の実装
physics_material_override.friction0.51.0床の滑りやすさ。大きいほど滑りにくい
physics_material_override.bounce0.01.0ボールが当たったときの反発力
collision_layer1, 2, 4, 8, … (2のべき乗)このオブジェクトがどのレイヤーに属するか

まとめ

一言要約:StaticBody2Dは、動かない物理オブジェクト(地面・壁・障害物)を簡単に実装できるノードです。

ポイント:

  • CollisionShape2Dを子ノードに追加して形状を定義する
  • constant_linear_velocityで「動いているような」効果(コンベアベルト)を作れる
  • collision_layer/maskで、どのオブジェクトと衝突するかを制御する

次回予告:次はTileMapLayerを解説します。多数のタイルを効率的に敷き詰めて2Dステージを構築する方法が分かります。

関連性の高いノード解説記事

この記事はGodot 4.xをもとに執筆しています。

コメント