[TIL] Unity - NavMesh Obstacles

MINO·2024년 7월 2일
post-thumbnail

2024-07-02


NavMesh Obstacles

NavMesh Agent 가 월드를 탐색하는 동안 피해야 하는 움직이는 장애물에 추가해주는 컴포넌트이다.

예를 들어, 몬스터와 NPC 는 NavMesh Agent 로 목표 지점을 정한 뒤, 스스로 길을 찾아야 한다.
플레이어와 다른 몬스터, NPC 등은 움직이고 있으며, 해당 오브젝트와 겹쳐서는 안되기 때문에, NavMesh Obstacles 를 통해 처리해준다.


Shape

사각형 Box 와 캡슐형 Capsule 이 존재한다.

임시로 넣어둔 Player 오브젝트의 스프라이트이다.
Capsule 보다는 Box 가 어울리는 것 같아 Box 로 설정해주고,
Center / Size 속성을 통해 적절한 위치와 크기를 맞춰주었다.


Carve

Carve 라는 속성은 의미만 봐서는 어떤 기능을 하는지 와닿지 않았다.

체크 박스를 클릭하였을 때, Player 주변의 Walkable 공간이 사라지는 것을 볼 수 있었다.

Nav Mesh Obstacles - Carve 속성을 체크해주면서,
Nav Mesh Agent 가 지나갈 수 있는 길 중에서, Obstacles 주변을 깎아내는 것 같았다.


Property

체크를 통해, Obstacles 주변의 길을 이용할 수 없게 설정하거나
Obstacles 주변의 길도 이용할 수 있게 설정할 수 있다.

  • Move Threshold : Obstacles 가 설정한 거리보다 많이 움직인 경우, 움직인다고 간주
  • Time To Stationary : Obstacles 가 정지되었다고 간주할 때까지 기다리는 시간
  • Carve Only Stationary : 정지 되었을 때만 NavMesh 업데이트

Property - Carve Only Stationary

  • Carve Only Stationary - Unchecked
    • 플레이어가 움직일 때 마다, NavMesh 의 상태가 변한다.

  • Carve Only Stationary - Checked
    • 플레이어가 일정 시간 멈춰있거나, 일정 거리 움직인 뒤 정지해야만,
      NavMesh의 상태가 변한다.

활용 방안

  • 동적인 장애물 회피 : 문이 열리고 닫힐 때, 문이 닫혀 있으면 Agent 가 다른 경로를 찾게 설정
  • 이동하는 장애물 회피 : 선로에 기차가 지나갈 때, 기차의 주변을 Carve 하여 해당 선로를 이용할 수 없게 설정
  • 성능 개선 : Nav Mesh 전체를 다시 구성하지 않고, 해당 영역만 동적으로 변경하여 사용할 수 있게 설정

TIL 마무리

예비군 동미참 훈련으로 인해, 프로젝트에 온전히 힘을 못 쓰고 있다.
열심히 고생한 팀원들을 따라잡기 위해서 훈련이 끝나고, 주말에 열심히 작업해야겠다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글