NavMeshAgent 는 유니티에서 제공하는 네비게이션 시스템입니다. 이 기능을 이용해 몬스터 객체가 플레이어 캐릭터를 자동으로 따라다니 게 하는 방법에 대해 알아보도록 하겠습니다.
플레이어 캐릭터의 이동이 필요하기 때문에 이전에 작성한 아래의 글을 토대로 진행할 것입니다.
프로젝트에 사용한 무료 에셋 목록은 이 글의 하단에 있습니다.
▶ Navigation Bake
Navigation 시스템을 이용하기 위해선 우선 이동할 수 있는 영역을 미리 계산하는 작업을 선행해야 합니다. 계산에 포함되는 Mesh 는 Navigation Static 속성을 가져야 합니다.
이전 글에서 진행한 프로젝트에서 Cube 객체를 바닥으로 사용하고 있기 때문에 Hierarchy 창에서 Cube 를 선택한 다음 Inspector 창에서 아래와 같이 Navigation Static 을 선택합니다.
유니티 에디터 메뉴에서 [Window > AI > Navigation] 을 선택하고 다음과 같이 Bake 를 해줍니다. Bake 를 하면 왼쪽의 Scene 창에 보이는 것과 같이 Cube 위에 파란색으로 NavMeshAgent 를 이용해 이동할 수 있는 영역이 표시됩니다.
▶ 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 필드에 연결합니다.
이 상태로 실행해도 Slime 몬스터가 플레이어를 따라다니지만 Slime 의 애니메이션 설정이 모든 애니메이션이 순차적으로 재생되도록 되어있기 때문에 우선 Animator 컴포넌트를 비활성화 시키는 게 좋습니다.
▶ 실행
이상으로 아주 간단한 작업으로 몬스터가 캐릭터를 따라다니게 하는 방법에 대해 알아보았습니다.
여기에 추가로 Animator 와 스크립트 작업을 조금만 해주면 몬스터가 따라가다가 특정 거리만큼 좁혀지면 공격을 하고 멀어지면 다시 따라가는 동작을 구현할 수 있습니다.
지금까지 작업한 내용이 포함된 패키지입니다.
※ 프로젝트에서 사용한 무료 에셋을 먼저 다운로드 -> Import 한 다음 위의 패키지를 import 하셔야 합니다.
▶ 무료 에셋 목록
플레이어 캐릭터
몬스터
발소리
'게임 프로그래밍 > 유니티 활용' 카테고리의 다른 글
[유니티 활용] 액션 RPG 스타일의 실시간 전투 구현하기 (0) | 2023.01.14 |
---|---|
[유니티 활용] StateMachine 을 활용한 3D 몬스터 AI 구현 (5) | 2023.01.12 |
[유니티 활용] Character Controller 로 캐릭터 이동과 점프 (22) | 2023.01.11 |
[유니티 활용] 캐릭터 애니메이션과 이벤트 - 발자국 소리 (21) | 2023.01.09 |
[유니티 활용] 마우스 클릭한 곳으로 부드럽게 바라보며 캐릭터 이동시키기 (16) | 2023.01.08 |
댓글