본문 바로가기
Study/Unity

[Unity] AI Navigation

by chobbo 2024. 5. 31.

 

유니티는 AI Navigation을 활용하여

NPC가 인공지능을 활용해 움직일 수 있게 한다

 

 

Navigation Mesh

-> 캐릭터가 움직일 수 있는 경로 Bake

-> NavMesh 컴포넌트를 사용하여 구현

 

1. Hierarchy 창에서 경로를 넣을 오브젝트 선택 후 Bake 클릭

상세 설정도 가능

 

Agent Radius

- 지형에 Agent가 얼마나 가깝게 다가갈 수 있는지

Agent Height

- Agent 가 다가갈 수 있는 공간의 높이

Max Slope

- Agent 가 걸어올라갈 수 있는 경사의 기울기

Step Height

- Agent 를 멈춰세우는 장애물의 높이

 

Min Region Area

- 연결되지 않은 작은 내비메시 영역을 제거

Manual Voxel Size

- Voxel은 부피를 가진 픽셀이라는 뜻 

- 베이크 프로세스가 작동하는 정확도를 변경

Height Mesh

- 정확한 캐릭터 배치가 필요할 때 사용

- 베이크 시간이 더 오래걸리고 메모리도 더 많이 사용

 

 

2. NavMesh 결과는 위에 파란 오버레이로 나타남

걸을 수 있는 Ground만 파랗게 표시된 모습

 

 

3. 베이킹이 끝나면 NavMesh 파일이 씬 이름과 같은 이름을 가진 폴더 안에 생성

 

 

 

 

NavMesh Obstacle

-> NavMesh Obstacle 컴포넌트를 사용하여 캐릭터가 이동하는 동안 

    충돌하지 않아야 할 장애물을 정의할 수 있음

 


1. 오브젝트에 NavMesh Agent 컴포넌트 추가

 

Shape

- Box 모양인지 Capsule 모양인지 선택

Center

- 장애물의 중심

Size

- 장애물 크기

Carve

- 활성화하지 않으면 장애물은 Collider과 유사

- 활성화 하면 장애물이 정지 상태일 때 NavMesh에 구멍을 뚫는다

    -> NavMesh를 파내버려서 에이전트가 움직일 수 없는 길로 만듦 & 베이크 새로하지 않아도 됨

    -> 일반적으로 내비게이션은 차단하지만 플레이어가 움직일 수 있는 내비메시 장애물이나 폭발과 같은 다른 게임 이벤트(예: 상자 또는 통)에 대해서는 카빙을 켜는 것이 좋다고 한다! 어렵군

 

속성 설정 후 NPC에 Rigidbody 컴포넌트를 추가하면 AI는 이 장애물을 피해 경로를 찾게된다.

 

 

 

 

NavMesh Agent

-> NavMesh Agent 컴포넌트를 사용하여 근접 회피 기능 구현

-> 근접 회피 기능이란? 여러 캐릭터나 NPC가 서로 충돌하지 않도록 하는 기술

 

 

1. NPC에  NavMesh Agent 컴포넌트 추가

 

경로 탐색

- 캐릭터의 현재 위치에서 목표 지점까지 가장 적절한 경로를 찾는 알고리즘
- 주로 A* 알고리즘 등이 사용, 지정된 목표 위치까지 최단 경로를 탐색

 

Steering Behavior 

- 캐릭터나 NPC가 경로를 따라 이동할 때, 보다 자연스러운 동작을 구현하는데 사용
- 동적으로 캐릭터의 이동 방향과 속력을 조정하여 부드럽고 현실적인 이동을 시뮬레이션

 

출처 - 

 

내비메시 에이전트 - Unity 매뉴얼

NavMeshAgent 컴포넌트는 목표를 향해 움직일 때 서로를 피해가는 캐릭터 생성에 유용합니다. 에이전트는 내비메시를 이용하여 게임 월드에 대해 추론하고 서로 또는 기타 움직이는 장애물을 피할

docs.unity3d.com

 

 

2. 스크립트 작성하여 컨트롤

public class NPC : MonoBehaviour{
    NavMeshAgent agent; 
    void Awake()
    {
    	 agent = GetComponent<NavMeshAgent>()
    }
}

 

SetDestination, CalculatePath 등의 여러 코드 작성 가능

 

 

 

 

 

OffMesh Link 

-> 걸을 수 있는 표면만으로는 정의할 수 없는 내비게이션 단축키를 통합

-> OffMeshLink 컴포넌트를 사용하여 구현

 

 

 

출처 - 유니티 공식문서

 

Unity의 내비게이션 시스템 - Unity 매뉴얼

내비게이션 시스템을 통해 게임 월드에서 이동할 수 있는 캐릭터를 생성할 수 있습니다. 2층으로 가기 위해 계단을 오르거나 배수로를 넘기 위해 점프해야 하는지를 이해할 수 있는 능력을 캐릭

docs.unity3d.com

 

'Study > Unity' 카테고리의 다른 글

[Unity] Particle System  (0) 2024.06.12
[Unity] Mixamo 애니메이션 적용법  (0) 2024.06.03
[Unity] Mathf  (0) 2024.05.29
[Unity] TMPRO 한글 Import 하는 방법  (0) 2024.05.27
[Unity] AnimationCurve  (0) 2024.05.27