Unity 자습서/Navigation

유니티 Navigation Basics #2 - Agent(이동 개체) 설정

개양반 2019. 1. 31.
728x90

오늘 공부할 내용

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

댓글

💲 추천 글