はじめに
Godot 4では、ゲーム内のキャラクターやオブジェクトを特定のルートに沿って移動させたい場面がよくあります。敵が巡回するルート、カットシーンでのカメラパス、移動するプラットフォームのレール——こうした「曲線のルート」を定義するために必要なのがPath2Dノードです。
Path2Dは2D空間に曲線を描き、その上をPathFollow2Dなどのノードが移動するための基盤を提供します。この記事では、Path2Dの使い方、プロパティ、そして実践的な活用法を詳しく解説します。
Path2Dとは?
Path2Dは、2D空間における曲線のルートを定義するノードです。内部的にはCurve2Dという曲線データを保持し、その上をPathFollow2Dが移動できます。Path2D自体は目に見えない「ガイドライン」として機能します。
地図上にペンでひいたルート線をイメージしてください。その線自体は動きませんが、その線の上を電車やバスが走ります。Path2Dが「線」で、PathFollow2Dが「乗り物」です。
継承ツリー:
Path2D → Node2D → CanvasItem → Node
Node2Dを継承しているため、シーンツリー内で位置や回転を設定できます。また、Curve2Dを内部に持つため、曲線に関するすべての操作はCurve2Dのメソッドを通じて行います。

このノードを使うべき場面
- 敵キャラクターの巡回ルート定義:敵が一定のルートに沿って移動する場合、Path2DとPathFollow2Dを組み合わせて実装できます。
- カットシーンのカメラパス:ゲーム画面の演出として、カメラをスムーズに動かしたいときにPath2Dでパスを定義します。
- 移動プラットフォームのレール定義:プレイヤーが乗れるプラットフォームが、滑らかな曲線に沿って移動するギミック。
- チュートリアル・UI誘導矢印:プレイヤーに「ここをタップしてください」と示す矢印が、滑らかなアニメーション付きで移動する場面。
別のノードが適切な場面:
- 複数のノードが決められたルートに沿って移動するが、それぞれ異なるアニメーションをしたい場合は、AnimationPlayerを組み合わせて使います。
- 単なる直線移動(AからBへ)であれば、Tween(アニメーション)を使う方がシンプルです。
- 複雑なAIの経路探索が必要な場合は、NavigationAgent2Dを使用します。
主なプロパティと機能
| プロパティ・メソッド | 型 | 役割 |
|---|---|---|
curve |
Curve2D | パスを定義する曲線データを取得・設定します |
curve.add_point(position, in, out) |
void | 曲線に制御ポイントを追加します(in, outで曲率を制御) |
curve.get_point_count() |
int | 曲線に含まれる制御ポイントの数を返します |
curve.sample(idx, t) |
Vector2 | idx番目のポイント区間のt地点(0.0~1.0)における位置を計算します |
curve.get_baked_length() |
float | 曲線全体の弧長(ピクセル単位)を返します |
GDScript コード例1:Path2Dに制御ポイントを追加する
extends Node2D
func _ready():
# Path2Dノードへの参照を取得
var path_2d = $Path2D
# 曲線に制御ポイントを追加
path_2d.curve.add_point(Vector2(0, 0))
path_2d.curve.add_point(Vector2(100, 50))
path_2d.curve.add_point(Vector2(200, 0))
path_2d.curve.add_point(Vector2(300, -50))
# 曲線の全長を取得
var total_length = path_2d.curve.get_baked_length()
print("曲線の全長: ", total_length, " ピクセル")
GDScript コード例2:曲線上の特定位置をサンプリングする
extends PathFollow2D
func _process(delta):
# PathFollow2Dの進捗を更新(毎フレーム50ピクセル進む)
progress += 50 * delta
# 親のPath2Dから曲線を取得
var parent_path = get_parent() as Path2D
var curve = parent_path.curve
# 曲線上の任意の位置をサンプリング
var sample_pos = curve.sample(0, 0.5) # 最初の区間の中点
print("サンプリング位置: ", sample_pos)

もっと使いこなす:カスタマイズできるパラメータ
| パラメータ・テクニック | 変えると何が起きるか |
|---|---|
curve.bake_interval |
曲線の解析度を変更。値を小さくするほど高精度だが処理コストが増加。デフォルト5.0で多くのゲームは問題ない |
PathFollow2D.progress |
曲線上のどこにいるかを0~曲線全長の数値で制御。毎フレーム増加させることで移動を実現 |
PathFollow2D.progress_ratio |
0.0~1.0の正規化された進捗値。ルート全体を0~1で表現でき、移動時間の計算が楽 |
PathFollow2D.h_offset / v_offset |
曲線の上下左右にオフセット。複数のオブジェクトを「並列」に走らせたいときに使用 |
PathFollow2D.rotates |
trueにするとPathFollow2Dが曲線に沿った方向を向く。敵が曲線に沿って向きを変える場合に有効 |
まとめ
Path2Dは、2D空間に「曲線のルート」を定義し、その上をPathFollow2Dなどが移動するための基盤となるノードです。敵の巡回ルート、カメラパス、プラットフォームのレールなど、多くのゲーム要素で活躍します。Curve2Dのメソッドを使いこなすことで、複雑で滑らかな移動を簡単に実装できます。
- Path2Dは曲線(Curve2D)を保持し、視覚的に編集可能
- PathFollow2Dと組み合わせて、オブジェクトをスムーズに移動させられる
- GDScriptでプログラマティックに制御ポイントを追加・操作することも可能
次回は、このPath2Dの上を実際に移動するPathFollow2Dについて詳しく解説します。PathFollow2Dを使いこなせば、より複雑なキャラクター移動や演出が可能になります。
シリーズ:Godot 4 ノード解説
- 001〜035:各種基本ノード
- 036〜075:UI・入力ノード
- 076〜085:アニメーション・制御ノード
- 086:Path2D(この記事)
- 087:PathFollow2D
- 088:NavigationAgent2D
- 089:CanvasLayer
- 090:SubViewport
この記事はGodot 4.xをもとに執筆しています。


コメント