본문 바로가기
게임 프로그래밍/유니티 활용

[유니티 활용] NavMeshAgent 사용법 (Simple Monster AI)

by 레오란다 2023. 1. 11.
반응형

NavMeshAgent 는 유니티에서 제공하는 네비게이션 시스템입니다. 이 기능을 이용해 몬스터 객체가 플레이어 캐릭터를 자동으로 따라다니 게 하는 방법에 대해 알아보도록 하겠습니다.

 

플레이어 캐릭터의 이동이 필요하기 때문에 이전에 작성한 아래의 글을 토대로 진행할 것입니다.

 

[유니티 활용] Character Controller 로 캐릭터 이동과 점프

이번 글에서는 캐릭터 움직임에 사용되는 컴포넌트인 Character Controller 를 이용해 캐릭터를 움직이고 점프하는 방법에 대해 알아보도록 하겠습니다. 이 글은 Character Controller 의 사용법 설명에 집

ugames.tistory.com

 

프로젝트에 사용한 무료 에셋 목록은 이 글의 하단에 있습니다.


 

Navigation Bake

Navigation 시스템을 이용하기 위해선 우선 이동할 수 있는 영역을 미리 계산하는 작업을 선행해야 합니다.  계산에 포함되는 Mesh 는 Navigation Static 속성을 가져야 합니다. 

 

이전 글에서 진행한 프로젝트에서 Cube 객체를 바닥으로 사용하고 있기 때문에 Hierarchy 창에서 Cube 를 선택한 다음 Inspector 창에서 아래와 같이 Navigation Static 을 선택합니다.

Navigation Static
바닥 Cube 객체를 Navigation Static 으로 설정

 

유니티 에디터 메뉴에서 [Window > AI > Navigation] 을 선택하고 다음과 같이 Bake 를 해줍니다. Bake 를 하면 왼쪽의 Scene 창에 보이는 것과 같이 Cube 위에 파란색으로 NavMeshAgent 를 이용해 이동할 수 있는 영역이 표시됩니다. 

 

Bake
Bake


 

NavMeshAgent 몬스터

다운로드 받은 Monster 중 마음에 드는 것을 Hierarchy 창에 드래그해서 객체를 생성해 줍니다. 이름에 PBR 이 붙어 있는 것은 셰이딩 방식의 차이이기 때문에 4가지 중 아무거나 사용해도 됩니다. 저는 Slime 을 이용해 만들도록 하겠습니다. 

 

먼저 Slime 객체를 선택하고 Inspector 창에서 [Add Component > Navigation > NavMeshAgent] 를 선택해 컴포넌트를 추가해 줍니다. 

 

다른 설정은 그대로 두고 Stopping Distance 만 2로 변경합니다. Stopping Distance 는 NavMeshAgent 로 이동하는 객체가 목적지에서 얼마만큼 떨어진 거리까지 이동하고 멈출 것이지 설정하는 것입니다.

 

Stopping Distance를 2 로 설정한 것은 목적위치에서 2 만큼 떨어진 지점까지 이동하고 멈추라는 의미입니다.

 

 

다음은 목표위치 설정은 스크립트를 이용해야 하기 때문에 Monster 라는 이름으로 새로운 스크립트를 추가해 줍니다. 몬스터 스크립트는 다음과 같이 작성합니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// NavMeshAgent 를 사용하기 위해 추가
using UnityEngine.AI;

public class Monster : MonoBehaviour
{
   public Transform target;

   NavMeshAgent nmAgent;   

   // Start is called before the first frame update
   void Start()
   {
      nmAgent = GetComponent<NavMeshAgent>();      
   }

   // Update is called once per frame
   void Update()
   {
      nmAgent.SetDestination(target.position);      
   }
}

코드는 아주 간단합니다. NavMeshAgent 컴포넌트를 가져온 후 Update() 함수에서 SetDestination 함수를 이용해 목적지를 설정해 주면 끝입니다. 목적지는 캐릭터가 움직이면 계속해서 변하기 때문에 Update() 함수에서 설정해 주는 것입니다.

 

다시 유니티 에디터로 돌아와서 Inspector 창에서 Player 객체를 Target 필드에 연결합니다.

 

Player 객체 연결

 

이 상태로 실행해도 Slime 몬스터가 플레이어를 따라다니지만 Slime 의 애니메이션 설정이 모든 애니메이션이 순차적으로 재생되도록 되어있기 때문에 우선 Animator 컴포넌트를 비활성화 시키는 게 좋습니다.


반응형

 

실행

실행 화면
나 잡아 봐라~

이상으로 아주 간단한 작업으로 몬스터가 캐릭터를 따라다니게 하는 방법에 대해 알아보았습니다.

 

여기에 추가로 Animator 와 스크립트 작업을 조금만 해주면 몬스터가 따라가다가 특정 거리만큼 좁혀지면 공격을 하고 멀어지면 다시 따라가는 동작을 구현할 수 있습니다.

 

지금까지 작업한 내용이 포함된 패키지입니다.

 

NavMeshMonster.unitypackage
0.02MB

 

※ 프로젝트에서 사용한 무료 에셋을 먼저 다운로드 -> Import 한 다음 위의 패키지를 import 하셔야 합니다.


 

무료 에셋 목록

플레이어 캐릭터

 

RPG Tiny Hero Duo PBR Polyart | 3D 휴머노이드 | Unity Asset Store

Elevate your workflow with the RPG Tiny Hero Duo PBR Polyart asset from Dungeon Mason. Find this & other 휴머노이드 options on the Unity Asset Store.

assetstore.unity.com

 

몬스터

 

RPG Monster Duo PBR Polyart | 3D 생물 | Unity Asset Store

Elevate your workflow with the RPG Monster Duo PBR Polyart asset from Dungeon Mason. Find this & other 생물 options on the Unity Asset Store.

assetstore.unity.com

 

발소리

 

Footsteps - Essentials | 기타 효과음 효과음 | Unity Asset Store

Layer in the sounds of Footsteps - Essentials from Nox_Sound for your next project. Browse all audio options on the Unity Asset Store.

assetstore.unity.com

 

반응형

댓글