AStarGrid2D 基礎編
グリッドベースのパスファインディングを実装する
1. AStarGrid2Dとは?
AStarGrid2Dは、Godot 4.4で導入されたクラスで、2Dグリッド上でのA*パスファインディングを簡単に実装できます。従来のAStar2Dよりも、グリッドベースのゲームに適した設計となっており、TileMapLayerとの連携も容易です。
2. AStarGrid2Dの設定
新しいシーンを作成し、ルートノードとして
Node2D
を追加します。 Node2D
の子として、AStarGrid2D
ノードを追加し、名前をAStarGrid
に変更します。 AStarGrid
ノードのインスペクターで、以下のプロパティを設定します: cell_size
: タイルのサイズ(例:Vector2(16, 16)
)offset
: グリッドのオフセット(通常はVector2(0, 0)
)
TileMapLayerとの連携
@onready var map: TileMapLayer = %Map@export var tile_size: Vector2 = Vector2(16, 16)
var astar: AStarGrid2D = AStarGrid2D.new()
func _ready() -> void: # マップ範囲をAStarに設定 var map_rect: Rect2i = map.get_used_rect() astar.region = map_rect astar.cell_size = tile_size astar.update()
3. 移動可能・不可能なセルの設定
AStarGrid2Dでは、すべてのセルがデフォルトで移動可能とされています。移動不可能なセル(障害物など)を設定するには、以下のようにします:
# 移動不可能なセルを設定astar_grid.set_point_solid(Vector2i(x, y), true)
これにより、指定したセルがパスファインディングの対象外となります。
4. パスの計算とユニットの移動
AStarGrid2Dを使用して、ユニットの移動経路を計算し、実際に移動させるには、以下のようにします:
# スタートとターゲットのセル座標var start = Vector2i(1, 1)var target = Vector2i(5, 5)
# パスの計算var path = astar_grid.get_id_path(start, target)
# パスに従ってユニットを移動for point in path: var world_position = point * astar_grid.cell_size # ユニットをworld_positionに移動させる処理
# 斜め移動をやめさせたい時は下記のように設定するastar.diagonal_mode = AStarGrid2D.DIAGONAL_MODE_NEVER
get_id_path
関数は、スタートからターゲットまでの最短経路を計算し、そのセル座標のリストを返します。
このようにしてAStarGrid2Dを活用することで、SRPGやタクティカルゲームのようなマップの表現力と管理性が大幅に向上します。
1
100%