본문 바로가기
게임 프로그래밍/게임개발 중급

게임개발 중급(57) - Monster Killer(19)

by jyppro 2023. 6. 20.

Monster Killer(19)

안녕하세요 약간의 사정으로 인해 이번에는 조금 늦었습니다. 계속 이어서 진행해보도록 하겠습니다.

이전에는 다른 종류의 몬스터가 소환되게하고, 애니메이션 동작 등 기존 몬스터와 같은 방식으로 생성되고 동작하도록 만들어주는 작업을 하였습니다. 오늘은 몬스터가 자유롭게 움직이도록 만드는 과정에 대해 이야기 해보겠습니다.

 

몬스터가 움직이도록 만들어주기

우선 저희는 몬스터가 항상 고정된 위치에서 게임을 진행하였습니다. 하지만, 몬스터가 계속 고정되어 있다면 그저 허수아비를 때리는 것 밖에 되지 않다고 생각했습니다. 그렇다면 몬스터가 움직일 수 있도록 해주려면 어떻게 해야 할까요?

 

NavMesh

몬스터가 따로 명령없이 스스로 자유롭게 움직이도록 해주는 것은 몬스터AI를 만들어 주는 것과 비슷합니다. 우리는 이런 움직임에 대해 컨트롤 할 때 사용하는 것이 있는데, 바로 NavMesh 입니다.

 

NavMesh는 게임에서 인공지능 캐릭터나 NPC가 이동할 수 있는 영역을 정의하는 기술입니다. NavMesh는 씬의 3D 공간을 네트워크로 분할하여 각각의 영역을 정적인 네비게이션 메쉬로 표현합니다. 이 네비게이션 메쉬는 캐릭터의 이동 가능한 경로를 계산하는 데 사용됩니다.

NavMesh를 사용하면 캐릭터가 벽, 장애물, 경사 등과 같은 장애물을 피해 자연스럽게 이동할 수 있습니다. NavMesh 시스템은 경로 탐색 알고리즘을 사용하여 캐릭터가 목적지까지 가는 최적의 경로를 계산합니다.

NavMesh를 구성하려면 다음과 같은 단계를 거칩니다:

1. 씬에서 이동 가능한 영역을 표시합니다. 이는 주로 에디터에서 지정하는 작업이며, 이를 통해 NavMesh를 생성할 수 있는 영역을 정의합니다.

2. NavMesh Agent 컴포넌트를 사용하는 캐릭터나 NPC에게 이동을 위한 NavMesh 영역을 할당합니다. NavMesh Agent는 NavMesh 위에서 캐릭터의 이동과 경로 탐색을 관리합니다.

3. NavMesh를 빌드하여 실제로 네비게이션 메쉬를 생성합니다. 이는 주로 에디터에서 수행하는 작업이며, NavMesh 컴포넌트를 사용하여 NavMesh 데이터를 생성합니다.

NavMesh를 사용하면 캐릭터의 이동을 쉽게 구현할 수 있으며, 경로 탐색과 장애물 회피 등의 복잡한 작업을 자동으로 처리할 수 있습니다. NavMesh는 게임의 AI와 유저 경험을 향상시키는 데 중요한 역할을 합니다.

 

NavMesh 사용하기

저는 이 NavMesh를 사용하기 위해 사용할 모든 몬스터 프리팹에 NavMeshAgent 컴포넌트를 추가해 주었습니다. 그리고 NavMesh를 사용하기 위해서는 Bake라는 과정을 거쳐야하는데, 쉽게 설명하자면 움직일 캐릭터의 크기, 장애물, 바닥의 높이 등을 정의하여 움직일 장소를 스캔하는 것과 같습니다. 위 과정에서 두번째 과정에 해당됩니다.

네비메쉬-에이전트
네비메쉬 에이전트 컴포넌트

 

Bake하기

베이크는 라이팅에서도 사용되는데 쉽게 말하자면, 정해진 설정대로 구워내는 것입니다. 일단 베이크를 하기 위해서는 Navigation 탭을 열어줘야 하는데, 해당 탭은 프로젝트의 도구창에 Window > AI > Navigation 으로 열 수 있습니다.

네비게이션 창을 열어보면 아래 사진과 같이 나옵니다.

네비게이션-창
네비게이션 창

Agents 탭에서 아까 말한 설정을 정의할 수 있고, 저희는 베이크 탭에 들어가서 Bake를 눌러 구워주면 됩니다. 베이크가 완료되었다면 움직일 오브젝트를 위한 발판이 마련되었다고 보시면 됩니다.

 

<NEXT>

오늘은 NavMesh에 대해 그리고 NavMesh를 사용하는 방법에 대해서 알아보았습니다. Bake를 통해서 판은 깔아주었으니 이제는 스크립트를 통해서 해당 오브젝트의 움직임을 정의해야 합니다. 해당 과정은 다음 시간에 알아보도록 하겠습니다. 감사합니다.