
NavMesh2D란?
기존의 3D 프로젝트 환경에서 사용하는 NavMesh 라이브러리를
2D 프로젝트 환경에서 사용할 수 있도록 만들어주는 커스텀 라이브러리이다.
설치방법은 위 링크의 설명에서 자세히 설명되어있다.
NavMesh2D 세팅방법
NavMesh의 navigation Modifier스크립트
- mesh의 크기만큼 area의 옵션을 설정하는 옵션
- 최단거리 알고리즘에서 가중치를 설정해줄 수 있듯 Cost를 설정하여 Agent의 경로를 유도 할 수 있다.(높을수록 낮은 우선순위)
Map Baking
- Navigation CollectSources2D : Rotation Surface to XY 버튼으로 3d 기반인 navMesh의 축을 2D에 맞게 변환해준다.
- Navigation Surface : 맵에 존재하는 navigation Modifier들을 처리하여 베이킹해준다
| 프로퍼티 이름 | 반환값 (Type) | 설명 |
|---|---|---|
acceleration | (float) | 최대 가속도 (m/s²) |
angularSpeed | (float) | 회전 속도 (도/초) |
areaMask | (int) | 통과 가능한 NavMesh 영역 마스크 |
autoBraking | (bool) | 목적지 도착 시 자동 감속 여부 |
autoRepath | (bool) | 경로 무효 시 자동 재탐색 여부 |
autoTraverseOffMeshLink | (bool) | OffMeshLink 자동 이동 여부 |
avoidancePriority | (int) | 장애물 회피 우선순위 (0~99, 낮을수록 우선) |
baseOffset | (float) | NavMesh 위 에이전트 높이 오프셋 |
desiredVelocity | (Vector3) | 현재 원하는 속도 (읽기 전용) |
destination | (Vector3) | 이동 목적지 좌표 |
hasPath | (bool) | 유효한 경로 존재 여부 (읽기 전용) |
height | (float) | 에이전트 높이 |
isOnNavMesh | (bool) | 에이전트가 NavMesh 위에 있는지 여부 (읽기 전용) |
isOnOffMeshLink | (bool) | 현재 OffMeshLink 위에 있는지 여부 (읽기 전용) |
isStopped | (bool) | 이동 멈춤 여부 |
nextPosition | (Vector3) | 다음 이동 위치, 강제 설정 가능 |
obstacleAvoidanceType | (ObstacleAvoidanceType) | 장애물 회피 품질 수준 |
path | (NavMeshPath) | 현재 경로 |
pathPending | (bool) | 경로 계산 중인지 여부 (읽기 전용) |
pathStatus | (NavMeshPathStatus) | 경로 상태 (완료, 부분, 없음 등) |
radius | (float) | 에이전트 회피 반경 |
remainingDistance | (float) | 목적지까지 남은 거리 (읽기 전용) |
speed | (float) | 최대 이동 속도 |
steeringTarget | (Vector3) | 현재 경로 목표 위치 (읽기 전용) |
stoppingDistance | (float) | 목적지에서 멈출 거리 |
updatePosition | (bool) | Transform 위치 자동 업데이트 여부 |
updateRotation | (bool) | Transform 회전 자동 업데이트 여부 |
velocity | (Vector3) | 현재 속도 |
| 메서드명 | 반환값 (Type) | 설명 |
|---|---|---|
SetDestination(Vector3 targetPos) | (bool) | 이동 목적지 설정 및 경로 탐색 시작 |
ResetPath() | (void) | 현재 경로 삭제 |
CalculatePath(Vector3 targetPos, NavMeshPath path) | (bool) | 특정 위치까지 경로 직접 계산하여 path에 저장 |
Move(Vector3 offset) | (void) | 현재 위치에서 상대 이동량 적용 |
Warp(Vector3 newPosition) | (bool) | 지정 위치로 즉시 이동 (물리적 이동X) |
FindClosestEdge(out NavMeshHit hit) | (bool) | 주변 NavMesh 가장자리 위치 탐색 |
SamplePathPosition(NavMeshPathStatus status, float distance, out NavMeshHit hit) | (bool) | 경로를 따라 특정 거리 위치 샘플링 |
GetAreaCost(int areaIndex) | (float) | 특정 NavMesh 영역 비용 조회 |
SetAreaCost(int areaIndex, float cost) | (void) | 특정 NavMesh 영역 비용 설정 |
ActivateCurrentOffMeshLink(bool activate) | (void) | OffMeshLink 자동 이동 활성화/비활성화 |
CompleteOffMeshLink() | (void) | OffMeshLink 이동 강제 완료 |
2D 환경에서 단기간안에 몬스터 이동구현을 어떻게 해야하나 고민하고 있었는데
마침 머릿속에 스쳐지나간 navmesh2D덕분에 살았다.
이번에 학습을 해두었으니 앞으로 급할때 자주 사용하는 라이브러리가 될 것 같다.
내일은 탄막패턴을 만들어야해서 탄막을 공부할 것 같다.