그래프 위에서 움직인다walkable: 지나갈 수 있는지 없는지 판별 - boolposition: 좌표 - Vector2IntgCost: 시작점부터 현재 위치까지 - inthCost (A*): 현재 위치에서 목표까지 - intFCost: gCost + hCost - intparent - Node
다익스트라(Dijkstra)
List의 성격
Closed 왜 HashSet일까?
Step()
1. OpenList 에서 어떤 걸 꺼내야할까?
2. 꺼낸 노드 어디로 가는가?
3. 이웃 노드 어떻게 처리하는가?
4. 이동 비용은 어떻게 계산하는가?
gCost만 사용[문제점]
휴리스틱(hCost)을 포함한 A* 알고리즘[다익스트라 vs A* 차이]
다익스트라
A*
A*

[예시]
S ... T
S = (0, 0)
T = (4, 0)
현재 노드 좌표 (1, 0) -> 타겟까지 우측 3칸
-> hCost: 목표까지 몇 칸 남았는지를 계산한 숫자
현재 위치 (1, 2)
타겟 위치 (4, 5)
|4 - 1| + |5 - 2| = 3 + 3 = 6
-> hCost = 6
A Node - 남은거리 (3)
B Node - 남은거리 (7)
A Node와 B Node는 gCost가 같다.
S -> a -> b -> c -> T
T.parent = c
c.parent = b
b.parent = a
a.parent = S
-> 거꾸로 올라감
isPath = true 순회했다고 표시를 남김
int newCost = currentNode.gCost + 1;
// 더 좋은 길을 찾았거나 || 이웃 노드를 처음 발견했거나
if (newCost < neighbour.gCost || !_openList.Contains(neighbour))
{
// 비용 갱신
neighbour.gCost = newCost;
neighbour.hCost = GetHeuristic(currentNode, _targetNode);
// 부모(이전) 노드를 기록
neighbour.parent = currentNode;
if(!_openList.Contains(neighbour))
// 리스트에 탐색 후보를 넣는다
_openList.Add(neighbour);
}
-> 다익스트라 + 휴리스틱 = A*
정리
// #01
Node - 가지고 있는 정보가 무엇이고, 의미하는바가 무엇인가?
1) walkable
2) position
3) gCost
// A* 용
3-1) hCost
3-2) FCost
4) parent
5) isPath
// #02
Node 데이터를 처리할 자료구조는 무엇이고, 왜 필요한가?
- OpenList
- ClosedSet
// #03
- 다익스트라
- gCost로만 판단
- StartNode
- A*
- FCost로 판단 || FCost 같다면 hCost로 판단
- StartNode, TargetNode