플레이어를 발견하면 추적하고, 공격 범위에 들어오면 공격을 하는 몬스터를 만들고 있다.
한가지 문제점은 플레이어가 도망가면 근접 몬스터가 줄줄이 따라오면서 대열이 만들어지고, 맨 앞의 몬스터가 공격상태에 들어가서 공격을 할 때, 뒤에있는 몬스터들은 추적 상태라 공격중인 몬스터를 밀고 들어오게 된다.
그러면서 플레이어도 함께 밀리고 도저히 공격을 할 수 없는 골치아픈 상황이 생겼다.
그래서 "NavMeshObstacle" 이라는 컴포넌트를 부착해 해결했다.
NavMeshObstacle
NavMeshAgent가 탐색하는 동안 피해야 하는 장애물 [ex) 물리적인 힘을 통해 움직이는 장애물 등] 을 인식한다.
장애물이 움직이는 동안 NavMeshAgent는 장애물을 피하기 위해 최선을 다한다. 장애물이 정지하면 NavMesh에 구멍을 뚫는다.
그런 다음 내비 메시 에이전트는 장애물로 인해 경로가 완전히 막힌 경우 다른 경로를 찾습니다.
쉽게말해서 움직이는 오브젝트에 NavMesh를 베이킹 할 때의 장애물을 동적으로 적용 시켜준다.
다만, NavMeshObstacle은 NavMeshAgent와 동시에 사용할 수 없는데, 둘 중 하나가 꺼져있는 상태면 함께 사용이 가능했다!
몬스터를 SFM으로 구현했기에, 공격 상태일 때는 NavMeshAgent를 끄고 NavMeshAgent를 켜는 방식으로 고쳤다.
몬스터가 공격중일 땐 다른 몬스터가 공격중인 몬스터를 피해간다.
약간 야매이긴 하지만 급한 불은 껐다.
'[StarChaser] 로그라이크 게임 프로젝트' 카테고리의 다른 글
[유니티/C#] 퀘스트 시스템 만들기 (0) | 2023.06.09 |
---|---|
[유니티/C#] 데이터를 관리하는 클래스 만들기 (1) | 2023.06.06 |
[유니티/C#] 클래스에서 원하는 조건의 랜덤 항목 뽑아오기 (0) | 2023.05.29 |
[유니티/C#] DataTable의 모든 행 읽어오기 (0) | 2023.05.26 |
[유니티/C#] DataTable로 엑셀 csv파일 읽어오기 (0) | 2023.05.05 |