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

はじめに

Godot 4では、ゲーム内のキャラクターやオブジェクトを特定のルートに沿って移動させたい場面がよくあります。敵が巡回するルート、カットシーンでのカメラパス、移動するプラットフォームのレール——こうした「曲線のルート」を定義するために必要なのがPath2Dノードです。

Path2Dは2D空間に曲線を描き、その上をPathFollow2Dなどのノードが移動するための基盤を提供します。この記事では、Path2Dの使い方、プロパティ、そして実践的な活用法を詳しく解説します。

Path2Dとは?

Path2Dは、2D空間における曲線のルートを定義するノードです。内部的にはCurve2Dという曲線データを保持し、その上をPathFollow2Dが移動できます。Path2D自体は目に見えない「ガイドライン」として機能します。

地図上にペンでひいたルート線をイメージしてください。その線自体は動きませんが、その線の上を電車やバスが走ります。Path2Dが「線」で、PathFollow2Dが「乗り物」です。

継承ツリー:


Path2D → Node2D → CanvasItem → Node

Node2Dを継承しているため、シーンツリー内で位置や回転を設定できます。また、Curve2Dを内部に持つため、曲線に関するすべての操作はCurve2Dのメソッドを通じて行います。




Path2Dノードの基本概念
Path2Dは曲線ルートを定義し、PathFollow2Dがその上を移動する基盤となる

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

  • 敵キャラクターの巡回ルート定義:敵が一定のルートに沿って移動する場合、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)




Path2Dの曲線編集画面
エディタでPath2Dの曲線を視覚的に編集できる。制御ポイントとハンドルをドラッグして形状を調整

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

パラメータ・テクニック 変えると何が起きるか
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 ノード解説

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

コメント