본문 바로가기

게임프로그래밍/실습1

[언리얼 실습] 54. 네비게이션 매시 만들기


목차

  1. 내비게이션 매시
  2. 내비게이션 실시간 업데이트 하기
  3. 내비게이션 매시 경계 간격 조절하기

1. 내비게이션 매시

 

에너미의 움직임을 순수하게 c++로 만들어 구현할 수도 있겠지만 이 경우에 매우 복잡하고 어려운 알고리즘을 필요로 할 것이다.

 

다행히도 언리얼 엔진에서는 이러한 알고리즘을 제공해 주고 우리는 그저 그 알고리즘을 가져다 쓰기만 하면 된다.

 

언리얼에 존재하는 내비게이션 시스템을 이용하기 위해서는 내비게이션 매시가 필요하다.

 

 

Place Actors 에서 nav Mesh를 검색하면 내비게이션 매시를 찾을 수 있다.

 

이 액터를 배치해 보자.

 

 

언리얼에서 제공해 주는 내비게이션 기능은 오로지 이 볼륨 안에서만 작동한다.

 

키보드로 P키를 누르면 이 볼륨으로 생성된 내비게이션 매시를 볼 수 있다. AI는 오직 이 안에서만 움직일 수 있기 때문에 이 범위를 우리가 원하는 만큼 늘릴 필요가 있다.

 

 

이 경계를 보면 오브젝트 주변은 채워지지 않고 비어있는 것을 알 수 있다. 그리고 이 경계의 크기는 설정으로 작게도 할 수 있고 크게 할 수도 있다.

 

그전에 다른 것부터 알아보자


 

2. 네비게이션 실시간 업데이트 하기

 

 

현재 내비게이션이 구조물 때문에 생성되지 않았다. 이때 구조물을 없애면 어떻게 될까?

 

 

그저 이렇게 비어있는 모습을 볼 수 있다. 무언가 막고 있는 오브젝트가 없어지면 내비게이션 매시가 생기게 하고 싶다.

 

그럴 때는 어떻게 해야 할까?

 

 

프로젝트 세팅에서 Navigation Mesh로 들어가자.

 

 

항목 중에 Runtime Generation이 있다. 이것을 Dynamic으로 바꿔보자.

 

 

 

오브젝트가 사라지자 매시가 업데이트되어서 채워지는 것을 볼 수 있다.

 

내비게이션을 이렇게 실시간으로 계속 다시 생성하려면 굉장히 많은 비용이 든다고 한다. 꼭 필요한 경우가 아니면 가급적 사용하지 않는 편이 좋다고 한다.

 

다시 Static으로 돌려놓도록 하겠다.


3. 내비게이션 매시 경계 간격 조절하기

 

내비게이션 매시는 오브젝트가 있으면 채워지지 않는데 약간의 여유를 두고 채워지지 않는다. 이 경계의 크기를 조절하고 싶을 수도 있다.

 

다시 프로젝트 세팅에서 네비게이션 매시로 들어가자.

 

 

디폴트의 셀사이즈 크기를 줄일 수록 네비게이션 매시가 촘촘해지고 셀사이즈가 클 수록 여유롭게 되는 것을 볼 수 있다.

 

언리얼 문서에서는 성능 최적화를 위해서는 문제가 되지 않는 선에서 최대한 cell size를 크게 잡으라고 되어있다. 만약 게임이 극한의 최적화를 요구한다면 이러한 부분도 염두해두어야 할듯 하다.

 

Low랑 Defualt High의 정확한 뜻이 무엇인지 궁금해서 찾아보았는데 이 또한 최적화와 관계된 부분으로 보인다.

이 부분은 언리얼 문서에서 더 자세히 찾아볼 수 있다.

 

이제 네비게이션 매시 설정이 끝났으니 에너미의 움직임을 구현할 차례이다.