문제점
기존에 몬스터 AI가 플레이어를 따라가도록 단순 추적 로직을 쓰고 있었는데,
장애물이 있는 경우 벽에 막혀서 가만히 서 있거나, 돌아가는 판단을 전혀 하지 못했다.
경로를 우회하는 방식이 전혀 없었기 때문에 맵 구조가 복잡해질수록 AI가 제대로 동작하지 않았다.
시도해본 것
처음엔 이동 방향을 바라보는 방향으로 유지하면서 Raycast로 벽을 감지하거나,
물리적으로 부딪히면 방향을 바꾸는 식으로 해결하려 했는데
정확성과 유연성이 너무 떨어졌고, 장애물을 지나지 못하는 문제는 그대로였다.
결국 A* 알고리즘을 도입해서 경로를 계산하고,
장애물이 있을 때는 계산된 경로를 따라가도록 변경했다.
해결방안
- A* 알고리즘으로 GridManager에서 몬스터 위치 ~ 플레이어 위치까지의 경로를 계산
- 경로가 있으면 _isFollowingPath 상태로 전환해서, 하나씩 좌표를 따라가게 처리
- 일정 거리 이하로 가까워지면 다음 좌표로 넘어가고,
마지막 도착 지점까지 다다르면 추적 종료 - 플레이어가 지속적으로 움직이는 게임 특성상 경로를 따라가는 방식이 장애물이 있을 때는 잘 작동하지만,
반대로 장애물이 없을때는 불필요한 계산이 많이필요할것 같았다.
→ 그래서 A*와 단순 추적을 상황에 따라 분기하는방식으로 수정했다.
주의점
- A*는 장애물 회피에는 확실히 효과적이지만, 항상 최적의 선택은 아님
- 장애물이 없는 평지에서는 A* 없이 단순하게 벡터 방향만 따라가는 게 빠르고 자연스러움
- 그래서 평소엔 단순 추적, 장애물이 감지되면 A*로 전환하는 하이브리드 구조가 가장 현실적
- 몬스터의 현재 위치와 타일 좌표를 잘 동기화하지 않으면 경로 계산이 어긋남
- 실제 이동은 Rigidbody2D.MovePosition()으로 처리해야 충돌 이슈가 적고 깔끔함
'Unity > Unity 개발' 카테고리의 다른 글
| SpriteRenderer 기준으로 Collider가 부정확하게 설정됨 (0) | 2025.05.14 |
|---|---|
| 몬스터 스킬 시스템 설계 및 개선 과정 (0) | 2025.05.12 |
| 몬스터 프리팹 구조 설계 "프리팹 1개 주입 방식 vs 몬스터별 프리팹 방식" (1) | 2025.05.08 |
| Unity 2D + Stack 게임 제작 일기(3) (0) | 2025.05.02 |
| Unity 2D + Stack 게임 제작 일기(2) (0) | 2025.05.02 |