Unity NavMesh를 활용한 AI 경로 찾기
2024. 12. 23. 03:39ㆍUnity
Unity NavMesh를 활용한 AI 경로 찾기
NavMesh는 Unity에서 제공하는 내장 경로 찾기 시스템으로, AI 캐릭터가 지형을 탐색하고 목표 지점까지 효율적으로 이동할 수 있도록 돕습니다. 이번 포스팅에서는 NavMesh의 기본 개념, 설정 방법, 그리고 AI 경로 찾기 구현 방법을 알아보겠습니다.
1. NavMesh란?
NavMesh(Navigation Mesh)는 3D 공간에서 AI가 이동할 수 있는 영역을 나타내는 데이터 구조입니다.
- NavMesh Agent: NavMesh 위에서 이동하는 AI 캐릭터.
- NavMesh Obstacles: 장애물을 정의하여 AI의 이동 경로를 제어.
주요 기능:
- AI 캐릭터의 경로 탐색.
- 장애물을 우회하는 동적 경로 계산.
- 지형에 따라 자동으로 길을 생성.
2. NavMesh 설정
1) NavMesh 생성
- Window > AI > Navigation을 클릭하여 Navigation 창을 엽니다.
- Scene 창에서 AI가 이동할 수 있는 지형을 선택합니다.
- Navigation 창에서 Bake 탭으로 이동하여 Bake 버튼을 클릭합니다.
- 선택한 지형이 NavMesh로 변환됩니다.
- Agent Radius, Height 등을 조정해 세부 설정을 변경할 수 있습니다.
2) NavMesh Agent 추가
- AI 캐릭터가 될 GameObject를 선택합니다.
- Inspector > Add Component > NavMesh Agent를 추가합니다.
- NavMesh Agent의 속성을 조정합니다:
- Speed: 이동 속도.
- Angular Speed: 회전 속도.
- Stopping Distance: 목표 지점에 도달 후 멈추는 거리.
3) NavMesh Obstacles 추가
- AI 경로를 차단할 GameObject를 선택합니다.
- Inspector > Add Component > NavMesh Obstacle을 추가합니다.
- Carve 옵션을 활성화하여 장애물이 NavMesh에 영향을 미치도록 설정합니다.
3. 스크립트를 통한 경로 찾기
1) 목표 지점 설정
AI가 이동할 목표 지점을 지정합니다.
using UnityEngine;
using UnityEngine.AI;
public class AIController : MonoBehaviour
{
public Transform target; // 목표 지점
private NavMeshAgent agent;
void Start()
{
agent = GetComponent<NavMeshAgent>();
agent.SetDestination(target.position); // 목표 지점으로 이동
}
void Update()
{
if (agent.remainingDistance <= agent.stoppingDistance)
{
// 목표 지점에 도달했을 때의 행동
Debug.Log("목표 지점에 도달");
}
}
}
2) 동적 목표 변경
플레이어의 위치 등 동적으로 변경되는 목표 지점에 AI를 이동시킬 수 있습니다.
void Update()
{
if (target != null)
{
agent.SetDestination(target.position); // 목표 위치를 실시간으로 업데이트
}
}
4. 장애물 우회 및 동적 경로 설정
1) NavMesh Obstacle 활용
장애물로 지정된 GameObject는 AI의 경로에 영향을 주어, AI가 이를 우회하도록 만듭니다.
- Carve를 활성화하면 NavMesh가 장애물을 중심으로 동적으로 재계산됩니다.
2) NavMesh Link 활용
높은 곳이나 단차를 넘어서 이동해야 하는 경우 NavMesh Link를 추가합니다.
- GameObject > AI > NavMesh Link를 선택하여 링크를 생성합니다.
- 링크의 시작(Start)과 끝(End) 위치를 설정합니다.
5. NavMesh의 확장 기능
1) 동적 NavMesh 업데이트
NavMesh가 실시간으로 변경되어야 하는 경우 NavMesh Surface를 사용합니다.
- NavMesh Components 패키지를 설치합니다.
- Package Manager에서 "NavMesh Components"를 검색하여 설치.
- 이동할 지형에 NavMesh Surface를 추가하고 설정합니다.
- 스크립트를 통해 동적으로 NavMesh를 갱신할 수 있습니다.
using UnityEngine.AI;
public class DynamicNavMesh : MonoBehaviour
{
public NavMeshSurface surface;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
surface.BuildNavMesh(); // NavMesh 재생성
}
}
}
2) AI 행동 추가
경로 탐색 외에도 AI 행동을 추가하여 더욱 생동감 있는 게임플레이를 구현할 수 있습니다.
- 추적(Chase): 플레이어를 따라가도록 설정.
- 도망(Flee): 특정 조건에서 목표로부터 멀어지도록 설정.
6. 요약
Unity NavMesh를 활용하면 AI 경로 탐색과 장애물 회피를 손쉽게 구현할 수 있습니다.
- NavMesh Bake로 AI가 이동 가능한 영역 생성.
- NavMesh Agent와 Obstacle을 활용해 동적 경로 계산.
- 스크립트를 통해 목표 지점을 제어하고 동적 환경에 대응.
'Unity' 카테고리의 다른 글
Unity 네트워크 기초 이론 (클라이언트-서버 구조) (0) | 2024.12.23 |
---|---|
Unity 간단한 적 AI 제작 (0) | 2024.12.23 |
Unity 오디오 믹서 사용법 (0) | 2024.12.20 |
Unity 사운드 이펙트와 배경 음악 설정 (0) | 2024.12.20 |
Unity 사운드 파일 추가 및 관리 (0) | 2024.12.20 |