저번 포스팅에 이어서 A* 알고리즘에서 엔티티의 사이즈를 적용하여 길찾기를 하는 방법에 대해서 알아보자.
A* 알고리즘은 해당 노드가 이동 가능한 지에 대한 bool 값을 가지고 있다. 몬스터 사이즈가 1칸이라면 이 walkable bool 값을 사용하면 된다.
근데, 만약 몬스터 사이즈가 3이라면?
1칸이 아니라 3x3 칸에 대해서 사이즈를 확인해야 할 것이다.
그래서, 나는 아래와 같이 사이즈를 통해 영역에 대한 walkable을 확인하는 메서드를 만들었다.
Vector2Int gridIndex = grid.GetGridIndex(center);
int boundary = entitySize / 2;
for (int x = -boundary; x <= boundary; x++)
{
for (int y = -boundary; y <= boundary; y++)
{
int gridX = gridIndex.x + x;
int gridY = gridIndex.y + y;
if (!grid.IsValidIndex(gridX, gridY)) continue;
if (!grid.Nodes[gridX, gridY].IsWalkable(targetIndex)) return false;
}
}
위의 코드에 대해 간단히 설명하자면, IsValidIndex()는 노드 그리드의 범위 안에 있는 지를 체크하고, IsWalkabe()이 실제로 해당 노드의 이동 가능을 체크해준다.
이렇게 몬스터 사이즈에 따라서 이동 가능한 지를 체크할 수 있다.
오늘은 A* 알고리즘에서 엔티티의 사이즈에 대한 것을 다루어 보았다.
다음에는 A* 알고리즘에서 목표 지점이 이동 불가능한 곳일 때 길을 찾는 법에 대해서 다루어 보겠다.