「敵の出現位置」「弾の発射位置」「エフェクトを出す場所」——ゲームには、決まった 座標 を扱いたい場面が山ほどあります。これをスクリプトに Vector2(150, 300) と直書きしてしまうと、位置を少し動かしたいだけでコードを開いて数値を打ち直す羽目になり、微調整のたびに消耗します。
この面倒を解消してくれるのが Marker2D ノードです。座標を コードから切り離してエディタ上の「目印」 として置けるので、キャラクターを動かす感覚でドラッグして位置を決められます。この記事では、Marker2Dの基本から、スポーン地点や武器のマズル管理といった実践的な使い方までを解説します。
この記事でわかること
- Marker2D とは(Node2Dとの違いと、旧Position2Dとの関係)
@exportで スポーン地点にデータを持たせる 実践的な使い方global_position/global_rotationで 追従する基準点 を作る- Marker2Dを 散らからせず整理 するコツ
Marker2Dとは? Node2Dとの違い
Marker2D は、2D空間の「目印」として使う、とても軽量なノードです。中身は Node2D とほぼ同じですが、決定的な違いが1つあります。 エディタ上に常に十字のギズモが表示される ことです。

素の Node2D は何も描画しないため、 エディタ上では位置が見えません (選択しないとどこにあるか分からない)。一方 Marker2D は十字の目印が常に見えているので、 オブジェクトをドラッグするのと同じ感覚 で座標を置いて微調整できます。コード内の抽象的な数値ではなく、目で見て触れる位置になるわけです。
補足: Godot 3にあった
Position2Dは、 Godot 4でMarker2Dに名前が変わりました 。役割は同じ「位置の目印」です。古い記事やサンプルでPosition2Dと出てきたらMarker2Dに読み替えてください。
実践:柔軟な敵スポーンシステムを組む
Marker2Dが真価を発揮するのが スポーン(出現)地点の管理 です。シューティングの敵編隊、タワーディフェンスの侵攻口、ローグライクのモンスター配置——「どこから」「何を」出すかをレベルデザイナーが コードを触らずに 調整できる仕組みを組んでみましょう。
まず、敵を出したい位置に Marker2D を置き、それぞれにスクリプトをアタッチして @export で「出す敵の種類」などの情報を持たせます。
# spawn_point.gd
extends Marker2D
@export var enemy_type: PackedScene # この地点から出す敵(インスペクタで割り当て)
@export var enabled: bool = true # この地点を使うか(デザイナーがオンオフできる)
こうしておくと、各スポーン地点は 「位置+出す敵+有効フラグ」を自分で持った目印 になります。あとは、それらを enemies_spawn_points グループに入れておき、管理側からまとめて読み取ります。
