(25/07/30)NavMesh2D

허윤·2025년 7월 30일
post-thumbnail

해당 깃

목차

NavMesh2D란?

기존의 3D 프로젝트 환경에서 사용하는 NavMesh 라이브러리를
2D 프로젝트 환경에서 사용할 수 있도록 만들어주는 커스텀 라이브러리이다.
설치방법은 위 링크의 설명에서 자세히 설명되어있다.

 

 

NavMesh2D 세팅방법

    • mesh의 크기만큼 area의 옵션을 설정하는 옵션
    • 최단거리 알고리즘에서 가중치를 설정해줄 수 있듯 Cost를 설정하여 Agent의 경로를 유도 할 수 있다.(높을수록 낮은 우선순위)
  • Map Baking

    • Navigation CollectSources2D : Rotation Surface to XY 버튼으로 3d 기반인 navMesh의 축을 2D에 맞게 변환해준다.
    • Navigation Surface : 맵에 존재하는 navigation Modifier들을 처리하여 베이킹해준다

 

 

주요 프로퍼티 (Properties)

프로퍼티 이름반환값 (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)현재 속도

주요 메서드 (Public Methods)

메서드명반환값 (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덕분에 살았다.
이번에 학습을 해두었으니 앞으로 급할때 자주 사용하는 라이브러리가 될 것 같다.
내일은 탄막패턴을 만들어야해서 탄막을 공부할 것 같다.

profile
C# 클라이언트 프로그래밍 지망

0개의 댓글