230927_ NavMeshAgent

Minsang Kim·2023년 9월 27일
0

TIL

목록 보기
32/41

저번에 이어서 네비게이션 이야기를 해보자.
네이게이션을 구웠다면, 오늘은 구운 빵위에서 춤춰보자.

NavMeshAgent

변수 / 프로퍼티

AI로 움직일 대상에 NavMeshAgent 컴포넌트를 달아주자.
컴포넌트의 구성요소가 덕지덕지 붙어있는데 한번 살펴보자.

  • Agent Type : 구운 NavMesh의 Agent 타입
  • Baset Offset : 충돌 실린더의 Y축 위치
  • Steering
    • Speed : 에이전트의 이동 속도
    • Angular Speed : 에이전트의 회전 속도 (Degree / second)
    • Acceleration : 최고 이동속도 까지의 시간
    • Stopping Distance : 목적지와 일정 거리가 되면 멈추는데 그 거리
    • Auto Braking : 목적지에 도달 전에 감속할 것인지. true면 딱 그자리에 멈추지만, false라면 자기 속도 감당 못하고 지나쳐버려서 왔다갔다 거림.
  • Obstacle Avoidance : 에이전트는 다른 에이전트 따윈 밀어버린다.
    • Radius : 밀어낼 범위
    • Height : 밀어내는 높이
    • Quality : 밀어내는 정도. High에서 Low로 갈수록 상남자식 밀치기를 보여준다. 양쪽 다 None이면 뚫고 지나가버린다.
    • Priority : 에이전트 간의 우선순위. 0(Max) ~ 99(Min). 상대의 우선순위가 낮을수록 상대적 상남자가 되어 밀고 지나가버린다. 반면에 낮은 친구는 높은 친구를 밀어내지 못하는 하남자가 된다.
  • Path Finding
    • Auto Repath : NavMesh에 변동이 있을 때 자동으로 길을 다시 찾을까 ?
    • Area Mask : 지나갈 수 있는 영역 설정

여기까지는 인스펙터 창에서도 확인할 수 있는 변수들이고, 아래는 스크립트를 작성할 때 유용한 것들에 대해 ARABOZA.

  • remainingDistance : 현재 경로에서 목표 지점까지 남아있는 거리
  • desiredVelocity : 목적지로 향하는 목표 속도. (실제 속도는 아님)
  • isStopped : true면 정지, false면 움직임
  • enabled : false면 NavMeshAgent 컴포넌트 비활성화, false면 AI 추적을 종료하고
  • isStopped=false와 enabled=false의 차이 : 에이전트들 끼리의 충돌을 하냐 마냐 차이. 아예 컴포넌트가 비활성화되어 있으면 서로를 인식하지 않는다.

메소드

이제는 메소드에 대해 ARABOZA.

  • bool SetDestination(Vector3 target) : target 위치까지 최단 경로를 찾아 이동시키는 메소드.
    - 목적지를 바라보도록 자동으로 회전시킨다.
    - SpeedAngularSpeed의 값 사용.
    - 올바른 요청이면 true, 아니면 false를 반환한다.
    - ※ Rigidbody보다 NavMeshAgent가 우선시 되기 때문에, Rigidbody의 함수들이 먹히질 않게 되는 점을 주의하자.

  • void Move(Vector3 offset) : offset만큼 이동하는 메소드.
    - NavMesh로 구워진 경로 내에서만 이동할 수 있다.

  • void ResetPath() : 현재 경로를 취소하고 멈춘다.

  • bool CalculatePath(Vector3 targetPosition, NavMeshPath path) : NavMeshAgent의 위치로부터 목적지 targetPosition까지 최단 경로를 계산하고, NavMeshPath 타입의 데이터path에 최단 경로의 코너 부분의 위치 벡터를 배열로 저장한다.
    - 전에 NevMeshPath path = new NavMeshPath()를 선언해주자.
    - 목적지에 갈 수 있으면 true, 아니면 false를 반환한다.
    - 저장은 path.corners에 Vector3 배열로 저장된다.

profile
게임만 하다가 개발자로

0개의 댓글