[StarChaser] 로그라이크 게임 프로젝트

[유니티/C#] NavMeshAgent 와 NavMeshObstacle

진서박 2023. 5. 22. 16:53
반응형

플레이어를 발견하면 추적하고, 공격 범위에 들어오면 공격을 하는 몬스터를 만들고 있다.

 

한가지 문제점은 플레이어가 도망가면 근접 몬스터가 줄줄이 따라오면서 대열이 만들어지고, 맨 앞의 몬스터가 공격상태에 들어가서 공격을 할 때, 뒤에있는 몬스터들은 추적 상태라 공격중인 몬스터를 밀고 들어오게 된다.

 

그러면서 플레이어도 함께 밀리고 도저히 공격을 할 수 없는 골치아픈 상황이 생겼다.

 

그래서 "NavMeshObstacle" 이라는 컴포넌트를 부착해 해결했다.

 

NavMeshObstacle

NavMeshAgent가 탐색하는 동안 피해야 하는 장애물 [ex) 물리적인 힘을 통해 움직이는 장애물 등] 을 인식한다.

장애물이 움직이는 동안 NavMeshAgent는 장애물을 피하기 위해 최선을 다한다. 장애물이 정지하면 NavMesh에 구멍을 뚫는다.

그런 다음 내비 메시 에이전트는 장애물로 인해 경로가 완전히 막힌 경우 다른 경로를 찾습니다.

 

쉽게말해서 움직이는 오브젝트에 NavMesh를 베이킹 할 때의 장애물을 동적으로 적용 시켜준다.

 

다만, NavMeshObstacleNavMeshAgent와 동시에 사용할 수 없는데, 둘 중 하나가 꺼져있는 상태면 함께 사용이 가능했다!

 

몬스터를 SFM으로 구현했기에, 공격 상태일 때는 NavMeshAgent를 끄고 NavMeshAgent를 켜는 방식으로 고쳤다.

몬스터가 공격중일 땐 다른 몬스터가 공격중인 몬스터를 피해간다.

 

약간 야매이긴 하지만 급한 불은 껐다.

반응형