오늘 공부할 내용
NavMesh Agent 를 활용해서 길을 찾아서 이동하는 플레이어를 만들겠습니다.
Player 설정
LowPolyNature\Prefabs\Characters 폴더에 있는 lp_guy 프리팹을 Hierarchy 뷰로 드래그 앤 드롭합니다. 이름을 Player로 변경하세요.
불필요한 컴포넌트를 모두 삭제해주세요.
Player 에게 Nav Mesh Agent 를 컴포넌트로 추가합니다.
Nav Mesh Agent 소개
Agent Type
Navigation 뷰의 Agents 탭에서 설정한 Agents 타입 중 1개를 선택할 수 있습니다.
멍멍이는 지나갈 수 있지만, 사람은 지나갈 수 없게 만들고 싶을 때처럼 똑같은 필드에서도 개체의 특징에 따라 다르게 동작하길 원할 때가 있습니다. 이럴 때 Agent Type 을 다르게 설정하면 됩니다.
Base Offset
충돌 실린더의 오프셋입니다. Base Offset 이 높을수록 충돌 실린더가 아래로 내려갑니다.
Steering 요소 설명
Speed: 최대 이동 속도
Angular Speed : 최대 회전 속도
Acceleration : 최대 가속
Stopping distance : 목표 위치에 가까워졌을 시 정지하는 거리
Auto Braking : 활성화되면 목적지에 다다를 때 속도를 줄입니다. 해당 개체가 순찰 동선처럼 여러 목표 지점을 왔다리 갔다리 해야할 때는 비활성화 해야 합니다.
Obstacle Avoidance 설명
Radius : 충돌 반경. 넓을 수록 좁은 폭을 지나갈 수 없습니다.
Height : 에이전트가 장애물 밑으로 지나갈 수 있는 높이 간격입니다.
Quality : 장애물 회피 품질입니다. 회피를 없음으로 설정하면 충돌만 체크되고 회피를 위한 동작을 하지 않습니다. 품질이 낮을 수록 CPU 자원이 절약됩니다.
Priority : 값은 0에서 99사이에서 설정되어야 하며 낮은 숫자가 높은 우선 순위임을 의미합니다. 낮은 우선 순위의 에이전트는 이 에이전트의 회피 대상에서 제외됩니다.
Path Finding 요소 설명
Auto Traverse OffMesh Link : 체크되어 있으면 오프 메시 링크를 이용해서 자동으로 점프하거나, 낙하를 합니다. 애니메이션을 사용하거나, 오프 메시 링크를 특정한 방법으로 사용하고 싶을 때는 설정을 꺼야 합니다.
Auto Repath : 활성화 시 에이전트가 경로 일부분의 끝에 도달하면 경로를 재탐색 합니다. 목적지까지 경로가 없다면 목적지에서 제일 가깝게 도달할 수 있는 위치까지 부분적인 경로가 생성됩니다.
Area Mask
Navigation 뷰의 Areas 탭에 있는 레이어 리스트가 표시됩니다. 비활성화된 지역은 이동 경로에서 제외됩니다.
이동 구현하기
목표 지점 만들기
빈 게임오브젝트를 만들고 이름을 Destination 으로 변경합니다. Player를 이동시키고 싶은 지점에 배치합니다.
스크립트 작성
Assets 에 Scripts 라는 폴더를 만듭니다. Scripts 폴더에 C# 스크립트 TestAgentScript.cs 를 만들고 아래 코드를 작성합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// Navigation 관련 기능을 사용할 때 필요.
using UnityEngine.AI;
public class TestAgentScript : MonoBehaviour
{
// 목표 지점
public Transform target;
NavMeshAgent agent;
void Start()
{
// 해당 개체의 NavMeshAgent 를 참조합니다.
agent = GetComponent<NavMeshAgent>();
}
void Update()
{
// 매프레임마다 목표지점으로 이동합니다.
agent.SetDestination(target.position);
}
}
#코드 설명
NavMeshAgent 는 개체가 길찾기 기능을 사용할 때 필요한 컴포넌트입니다.
Update() 에서 SetDestination(목표지점 좌표) 를 설정하면 매프레임마다 해당 개체의 이동속도에 따라 목표지점으로 이동합니다.
컴포넌트 연결
Player 에게 TestAgentScript.cs 를 컴포넌트로 추가하고 TestAgentScript의 Target에 Destination 을 연결합니다.
테스트하기
재생 버튼을 누르면 목표지점으로 이동하면서 장애물을 피해가는 것을 확인할 수 있습니다.
해당 강좌는 유튜브에도 올려놨습니다.
유튜브 링크 : https://youtu.be/WDQNRcaNJuA
'Unity 자습서 > Navigation' 카테고리의 다른 글
유니티 Navigation Basics #4 - NavMesh Obstacles (0) | 2019.02.13 |
---|---|
유니티 Navigation Basics #3 - Off-mesh Links (점프, 낙하) (0) | 2019.02.08 |
유니티 Navigation Basics #1 - 이동 구역 설정하기 (0) | 2019.01.29 |
댓글