Unity

A*를 활용한 문제 해결 사례

ckhyeok 2019. 11. 25. 13:10

문제.

유저를 추적하는 AI가 있습니다.

이 AI는 유저를 추적 할 때 그 공격경로에 오브젝트가 있으면 오브젝트를 피해가며 추적을 해야합니다.

또한 유저가 엘리베이터를 타고 2층으로 올라갔을 시 근처 엘리베이터를 찾은 후 따라가야 합니다.

 

하지만 AI의  Character Controller 내 Move 함수를 사용하니 유저를 추적하는 과정에서 문제가 생겼습니다.

이 문제를 해결하기 위한 방법을 모색하다가 NavMeshAgent와 A* Algorithm을 사용하기로 했습니다.

RequestPath 에서 현재 위치와 목표위치를 입력 한다.

 

입력 받은 값들을 Enqueue한 상태로 TryProcessNext() 함수를 돌려줌.

 

이전에 Enqueue 한 값을 Dequeue 해 주며 Pathfinding에 StartFindPath를 돌려줍니다.
목표 위치가 바뀌어도 계속 추적 가능함.
아직까지는 부드럽게 이동 하지 않음

 

 

기울기 값과 y절편 값을 구해줌.
이전 위치와 현재 위치의 회전거리를 계산 한다.

 

바꾸기 전
바꾼 후

 

 

위로 올라 갈 가장 가까운 엘리베이터 찾기

 

 

 

사진 = 코드박스로 수정 예정

전체적인 코드 구조도 다시 수정할 예정.