유니티는 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 결과는 위에 파란 오버레이로 나타남
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 |