対象読者:Godotの基本操作を少し触ったことがある初級者の方
はじめに
Godot 4で2Dゲームを作ろうと思ったとき、キャラクターやアイテム、背景を画面上に配置するには?そこで活躍するのが Node2D です。Node2Dは、2Dゲームを作るなら実質必ず使うことになる基本ノードです。キャラクター、背景、アイテムなど、画面に映るほぼすべてのものが内部的にこのNode2Dの機能を土台にしています。この記事では、Node2Dの役割、使い方、カスタマイズ方法まで、初級者の方にも分かるように丁寧に解説します。この記事を読めば、2Dゲームの舞台作りの基本が理解できます。
Node2Dとは?
Node2D は、Godot 4で 2次元の空間に存在するすべてのものの親クラス です。キャラクター、敵、背景画像、タイル…これらはすべて2D空間上に「位置」「回転」「拡大縮小」を持っています。Node2D はそうした情報を管理し、画面上に正しく描画するためのノードです。
初心者向けたとえ:舞台上に立つ俳優を想像してください。俳優が「どこに立つか」「どの向きか」「大きさは」という情報が必要ですね。Node2D はそれらを管理する舞台スタッフみたいなものです。
Node2D は CanvasItem を継承しており、描画に関する基本的な機能を持っています。実際には、キャラクターには Sprite2D(画像表示用)や CharacterBody2D(物理演算対応)といった子クラスがあり、これらはすべて Node2D の機能を引き継いでいます。
このノードを使うべき場面
- 2Dゲームの基本構造を作るとき: ゲームシーンのルートノードとして使う。その下に Sprite2D や CharacterBody2D などを配置します
- 複数のスプライトをグループ化するとき: キャラクターの体と剣を一緒に動かしたいなら、Node2D の下に両方を置くだけで OK
- 背景やステージのレイアウトを作るとき: 複数の背景画像や障害物を配置して、ゲームの舞台を構成します
- パーティクルエフェクトの親ノードにするとき: 爆発や魔法のエフェクトを特定の位置で発生させます
- カメラの親にするとき: カメラを移動させてゲーム画面をスクロールさせられます
- 複数オブジェクトをまとめて位置管理したいとき: 敵グループ全体を一括で移動させたいときなど、複数のノードをNode2Dの下にまとめておくと座標操作がまとめてできます
- 見た目を持たない目印(マーカー)として使いたいとき: エフェクトの発生位置など、座標だけを管理する基準点として配置します
こういうときは使わない・別のノードが適切:
- 物理演算が必要な場合: 敵や主人公が壁に衝突したり、重力で落ちるなら
CharacterBody2DやRigidBody2Dを使いましょう - 画像をそのまま表示するだけの場合: Node2D よりも
Sprite2Dを直接使う方が効率的です
使うかどうかの目安: 画像を表示したいだけならSprite2Dで十分ですが、複数のノードをまとめて位置管理したい、または独自の描画処理を書きたい場合はNode2Dが必要になります。
主なプロパティと機能
Node2D が持つ代表的なプロパティと、それを操作するメソッドをまとめました:
| プロパティ/メソッド | 説明 | 型 |
|---|---|---|
position | ノードの位置を X, Y 座標で指定(画面左上が原点) | Vector2 |
rotation | ノードの回転角(ラジアン単位) | float |
scale | ノードの大きさ倍率(1.0 = 等倍、0.5 = 半分) | Vector2 |
rotation_degrees | ノードの回転角(度数法)。rotation より直感的 | float |
global_position | 親ノードを考慮した「世界座標」での位置 | Vector2 |
z_index | 描画の前後関係(大きいほど手前に描画される) | int |
使用例:Node2D の基本操作
貼り付け先の準備: ①シーンツリーでNode2Dを選択 ②右クリックして「アタッチスクリプト」→言語はGDScriptのまま「作成」を押す ③開いたスクリプトエディタに以下のコードを貼り付けて再生ボタン(またはF6)で実行
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 に所属
よくある質問:似たノードとの違い
Q. NodeとNode2Dは何が違う?
A. Node2Dは座標(position)や回転(rotation)を持つ点が最大の違いです。位置を持たない管理用ノードが欲しいだけならNodeで十分です。
Q. Node2DとSprite2Dの違いは?
A. Node2Dは見た目を持たない「位置管理役」、Sprite2Dは実際に画像を表示する役目です。画像を表示したいだけならSprite2Dを使いましょう。
まとめ
Node2D は 2Dゲームの舞台そのもの。キャラクター・背景・エフェクトなど、画面に映るあらゆるものは Node2D か、その子クラスとして存在します。position、rotation、scale を使いこなすことで、ゲーム画面のレイアウトはほぼ完成です。
覚えておくべき3つのポイント:
- Node2D は2D空間の位置・回転・大きさを管理する基本ノード
- 複数のノードを Node2D の下に配置することで、グループのように一括制御できる
- 物理演算が必要なら CharacterBody2D など、より特化したノードを選ぼう
次の記事では、Node2D の最も実用的な子クラス「Sprite2D」を解説します。画像の表示方法から、アニメーション制御まで、ゲーム開発にすぐ役立つ内容をお届けします。
関連性の高いノード解説記事
- Node
- Node2D(このページ)
- Sprite2D
- CharacterBody2D
- AnimatedSprite2D
- Rect2D
- Area2D
- TileMap
この記事はGodot 4.xをもとに執筆しています。



コメント