본문 바로가기
프로그래밍/유니티

Unity NavMesh #5 실시간 네비메시 빌드 2

by 넋두리- 2021. 2. 16.

방아쇠 수지 증후군 때문에 타이핑이 조금 불편하지만 오늘도 이어서 포스팅하려합니다.

 

이전의 포스팅과 마찬가지로

혹시 NavMesh Building Component를 다운받지 않았으면 아래 링크에서 먼저 다운로드 해주세요.

다운로드 : github.com/Unity-Technologies/NavMeshComponents

 

Unity-Technologies/NavMeshComponents

High Level API Components for Runtime NavMesh Building - Unity-Technologies/NavMeshComponents

github.com

 

먼저 4_sliding_window_infinite.unity를 열어주세요.

 

NavMesh가 보이도록 Scene탭을 열고 Navigation탭도 활성화시키고 실행했습니다.

4_sliding_window_infinite

두번째 예제에서 봤던 LocalNavMeshBuilder 클래스가 또 등장하네요. LocalNavMeshBuilder는 아래를 참고..

twosouls.tistory.com/7

 

Unity NavMesh #3 NavMesh 빌딩 컴포넌트 2

오늘은 NavMesh Building Component의 두번째 예제를 살펴보려고 합니다. 두번째 예제에는 runtime navmesh build, real-time navmesh build와 관련된 내용이 있습니다. 이게 무슨 내용이냐구요? 예제를 통해서 천..

twosouls.tistory.com

 

이번 예제에서 무엇을 말하려고 하는가 했더니 NavMesh의 실시간 업데이트인 것 같습니다.

어떤 내용인지 자세히 보기 위해서 씬 뷰를 확대해봤어요.

NavMesh hole

나무가 위치한 부분에 구멍이 보이시죠?

NavMesh 빌드가 되면서 발생한 것이에요.

 

NavMeshAgent는 NavMesh 위에서만 이동하도록 되어있으므로

저렇게 구멍이 뚫리면 길찾기 알고리즘에서 알아서 피해가도록 되어있습니다.

 

NavMeshSourceTag의 Collect 함수에서 area를 0으로 세팅하고 있는데,

이는 Walkable Area를 의미합니다.

 

왜 Not Walkable이 아니고 Walkable로 세팅했는데 구멍이 뚫렸을까요?

이유는 에이전트의 세팅값(Radius, Height, Slope, Climb) 등을 고려해서 나무 부분은 이동이 불가능한 지역이라고

판단되기 때문에 hole이 생긴 것입니다.

 

마지막으로 전체적으로 네비 메시 빌드 과정을 보면

LocalNavMeshBuilder에 Tracked 변수에 에이전트를 연결 시켜놓아

에이전트를 따라다니며 네비 메시 업데이트를 하고 있습니다.

불필요하게 전체 네비 메시를 베이킹 하지않더라도 실시간 부분 베이킹으로

성능 향상에 큰 도움이 되겠네요!!

 

오픈 월드 구현에서 최적화는 반드시 필요한 부분일텐데요.

이러한 부분이 도움을 줄 수 있을 것 같네요.

 

오늘도 저번 시간처럼 간단하게 마무리 되었네요.

 

그럼 다음 예제에서 뵙겠습니다!

댓글