저번 포스팅에 이어서 이번에는 A* 알고리즘에서 목표 지점에 콜라이더를 가진 오브젝트가 있을 때의 노드 설정 방법에 대해 알아볼 것이다.
A* 알고리즘은 해당 노드가 이동 가능한 지에 대한 bool 값을 가지고 있다. 근데, 목표 지점에 콜라이더가 설정되어 있는 건물류라면, 노드를 그냥 bool 값으로 설정하면, 경로를 받아올 수 없을 것이다.
그래서, 나는 이동 가능 유무를 아래와 같이 만들어 보았다.
public bool IsWalkable(int index)
{
// -1 : 무조건 walkable
if (walkableIndex == -1) return true;
// index와 동일 : 이동하려는 타겟이므로 true
if (walkableIndex == index) return true;
return false;
}
즉, 이동하려는 타겟의 인덱스와 동일하면, 이동 가능하다고 판별해주는 것이다. 그러면, 경로가 마지막 노드까지 연결될 것이다.
그러나, 내 프로젝트에서는 엔티티가 공격 범위에 들어오면 이동하다가 공격 상태로 전환되는 FSM을 사용 중이기 때문에, 그냥 나의 코드를 사용한다면 목표 오브젝트와 엔티티가 부딪힐 것이다. 따라서, 목표 지점이 콜라이더가 있는 오브젝트인 경우에는, 따로 예외처리를 무조건 해주어야 한다.
오늘은 A* 알고리즘에서 목표 지점에 콜라이더를 가진 오브젝트가 있을 때의 노드 설정 방법에 대해 다루어 보았다.
이상으로 길고 길었던 A* 알고리즘 포스팅을 마칠 것 같다.
근데, 또 생기면 쓸 수도??