ノード解説「Node2D」

Node解説

はじめに

Godot 4で2Dゲームを作ろうと思ったとき、キャラクターやアイテム、背景を画面上に配置するには?そこで活躍するのが Node2D です。この記事では、Node2Dの役割、使い方、カスタマイズ方法まで、完全初心者向けに丁寧に解説します。この記事を読めば、2Dゲームの舞台作りの基本が理解できます。

Node2Dとは?

Node2D は、Godot 4で 2次元の空間に存在するすべてのものの親クラス です。キャラクター、敵、背景画像、タイル…これらはすべて2D空間上に「位置」「回転」「拡大縮小」を持っています。Node2D はそうした情報を管理し、画面上に正しく描画するためのノードです。

初心者向けたとえ:舞台上に立つ俳優を想像してください。俳優が「どこに立つか」「どの向きか」「大きさは」という情報が必要ですね。Node2D はそれらを管理する舞台スタッフみたいなものです。

Node2D は CanvasItem を継承しており、描画に関する基本的な機能を持っています。実際には、キャラクターには Sprite2D(画像表示用)や CharacterBody2D(物理演算対応)といった子クラスがあり、これらはすべて Node2D の機能を引き継いでいます。

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

  • 2Dゲームの基本構造を作るとき: ゲームシーンのルートノードとして使う。その下に Sprite2D や CharacterBody2D などを配置します
  • 複数のスプライトをグループ化するとき: キャラクターの体と剣を一緒に動かしたいなら、Node2D の下に両方を置くだけで OK
  • 背景やステージのレイアウトを作るとき: 複数の背景画像や障害物を配置して、ゲームの舞台を構成します
  • パーティクルエフェクトの親ノードにするとき: 爆発や魔法のエフェクトを特定の位置で発生させます
  • カメラの親にするとき: カメラを移動させてゲーム画面をスクロールさせられます

こういうときは使わない・別のノードが適切:

  • 物理演算が必要な場合: 敵や主人公が壁に衝突したり、重力で落ちるなら CharacterBody2DRigidBody2D を使いましょう
  • 画像をそのまま表示するだけの場合: 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 ノード解説


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

コメント