はじめに
Godot 4で2Dゲームを作ろうと思ったとき、キャラクターやアイテム、背景を画面上に配置するには?そこで活躍するのが Node2D です。この記事では、Node2Dの役割、使い方、カスタマイズ方法まで、完全初心者向けに丁寧に解説します。この記事を読めば、2Dゲームの舞台作りの基本が理解できます。
Node2Dとは?
Node2D は、Godot 4で 2次元の空間に存在するすべてのものの親クラス です。キャラクター、敵、背景画像、タイル…これらはすべて2D空間上に「位置」「回転」「拡大縮小」を持っています。Node2D はそうした情報を管理し、画面上に正しく描画するためのノードです。
初心者向けたとえ:舞台上に立つ俳優を想像してください。俳優が「どこに立つか」「どの向きか」「大きさは」という情報が必要ですね。Node2D はそれらを管理する舞台スタッフみたいなものです。
Node2D は CanvasItem を継承しており、描画に関する基本的な機能を持っています。実際には、キャラクターには Sprite2D(画像表示用)や CharacterBody2D(物理演算対応)といった子クラスがあり、これらはすべて Node2D の機能を引き継いでいます。
このノードを使うべき場面
- 2Dゲームの基本構造を作るとき: ゲームシーンのルートノードとして使う。その下に Sprite2D や CharacterBody2D などを配置します
- 複数のスプライトをグループ化するとき: キャラクターの体と剣を一緒に動かしたいなら、Node2D の下に両方を置くだけで OK
- 背景やステージのレイアウトを作るとき: 複数の背景画像や障害物を配置して、ゲームの舞台を構成します
- パーティクルエフェクトの親ノードにするとき: 爆発や魔法のエフェクトを特定の位置で発生させます
- カメラの親にするとき: カメラを移動させてゲーム画面をスクロールさせられます
こういうときは使わない・別のノードが適切:
- 物理演算が必要な場合: 敵や主人公が壁に衝突したり、重力で落ちるなら
CharacterBody2DやRigidBody2Dを使いましょう - 画像をそのまま表示するだけの場合: Node2D よりも
Sprite2Dを直接使う方が効率的です
主なプロパティと機能
Node2D が持つ代表的なプロパティと、それを操作するメソッドをまとめました:
| プロパティ/メソッド | 説明 | 型 |
|---|---|---|
position |
ノードの位置を X, Y 座標で指定(画面左上が原点) | Vector2 |
rotation |
ノードの回転角(ラジアン単位) | float |
scale |
ノードの大きさ倍率(1.0 = 等倍、0.5 = 半分) | Vector2 |
rotation_degrees |
ノードの回転角(度数法)。rotation より直感的 | float |
global_position |
親ノードを考慮した「世界座標」での位置 | Vector2 |
z_index |
描画の前後関係(大きいほど手前に描画される) | int |
使用例:Node2D の基本操作
extends Node2D
func _ready():
# 位置を (200, 150) に設定
position = Vector2(200, 150)
# 回転を 45 度に設定
rotation_degrees = 45
# 大きさを 2 倍に拡大
scale = Vector2(2, 2)
func _process(delta):
# フレームごとに右に移動
position.x += 100 * delta
# 毎フレーム回転
rotation_degrees += 30 * delta
上級者向け:いじれるパラメータとその効果
初心者の方は読み飛ばしてOKです。経験を積んだ開発者がカスタマイズするパラメータをピックアップしました。
| パラメータ | デフォルト | 何が変わるか | 使用例 |
|---|---|---|---|
offset |
(0, 0) | 子ノードの配置基準点をずらす。position で指定した座標から相対的にズレる | キャラクターの足を基準点にしたいとき |
skew |
0 | ノードを斜めに歪ませる(ラジアン単位)。3D風な表現に使える | 等角投影的なゲーム画面の表現 |
use_parent_material |
false | 親ノードのマテリアルを子も使うかどうか。true にするとシェーダ処理が共有される | キャラクター全体に画面エフェクトを一括適用 |
visibility_layer |
1 | どのレイヤーに属するかを示す。カメラ側の visibility_mask と組み合わせて、特定のノードだけ非表示にできる | UI レイヤーとゲーム世界を分ける |
light_mask |
1 | 2D ライトの影響を受けるかどうかを制御(ビットマスク) | 懐中電灯の光が当たるオブジェクトだけ指定 |
self_modulate |
白(不透明) | ノード自身の色と透明度を変更。子ノードには影響しない | 敵が被ダメージ時に赤くなる表現 |
パラメータ活用例
extends Node2D
func _ready():
# キャラクターの足を原点として設定
offset = Vector2(0, 32)
# ダメージ時に一時的に赤くする
self_modulate = Color.RED
await get_tree().create_timer(0.3).timeout
self_modulate = Color.WHITE
# 特定のレイヤーのみ表示
visibility_layer = 2 # レイヤー 2 に所属
まとめ
Node2D は 2Dゲームの舞台そのもの。キャラクター・背景・エフェクトなど、画面に映るあらゆるものは Node2D か、その子クラスとして存在します。position、rotation、scale を使いこなすことで、ゲーム画面のレイアウトはほぼ完成です。
覚えておくべき3つのポイント:
- Node2D は2D空間の位置・回転・大きさを管理する基本ノード
- 複数のノードを Node2D の下に配置することで、グループのように一括制御できる
- 物理演算が必要なら CharacterBody2D など、より特化したノードを選ぼう
次の記事では、Node2D の最も実用的な子クラス「Sprite2D」を解説します。画像の表示方法から、アニメーション制御まで、ゲーム開発にすぐ役立つ内容をお届けします。
シリーズ:Godot 4 ノード解説
- 001_Godot入門_Node
- 002_Godot入門_Node2D(このページ)
- 003_Godot入門_Sprite2D
- 004_Godot入門_CharacterBody2D
- 005_Godot入門_AnimatedSprite2D
- 006_Godot入門_Rect2D
- 007_Godot入門_Area2D
- 008_Godot入門_TileMap
この記事はGodot 4.xをもとに執筆しています。


コメント