[내배캠] 유니티 숙련 팀프로젝트#3

Sungchan Ahn(안성찬)·2024년 11월 5일

내일배움캠프

목록 보기
55/104

AI Navigation

유니티에서는 내비게이션 메시를 자동으로 생성하여 게임 캐릭터가 갈 수 있는 곳, 없는 곳을 구분하고 최적의 경로를 탐색하여 움직일 수 있는 AI Navigation 시스템이 있다.

게임 월드에서 걸을 수 있는 표면을 뜻한다. 이동 가능/불가능한 곳을 설정하고, 그 위에서 어느 한 위치로 이동할 수 있는 최적의 경로를 찾아 자동으로 이동시킬 수 있다.

NavMesh Agent 컴포넌트를 사용하여 목표 위치로 이동하는 동안 장애물, 다른 NavMeshAgent를 피할 수 있는 캐릭터를 만들 수 있다.

이 컴포넌트를 사용하여 장애물을 설정할 수 있다. 움직이는 장애물이면 피하도록 설정, 정지한 경우 NavMesh 상에서 갈 수 없는 곳으로 설정한다. 경로를 완전히 차단하면 다른 경로를 찾게 할 수 있다.

오늘 발생한 문제 (NavMesh 관련)

NavMesh에서 갈 수 있는 곳으로 표시된 경사면을 오브젝트가 가지 못하고 있는 경우가 발생했다.
원인은 rigidbody를 가진 오브젝트의 Collider가 경사면 Collider와 부딪혀 이동을 막고 있었다. Collider는 BoxCollider였고, 오브젝트의 머리부터 바닥까지의 크기를 가지고 있었다.

해결

다양한 시도를 해서 해결할 수 있었다.

  1. 오브젝트의 Collider isTrigger를 하면 간단히 해결할 수 있고 다양한 문제들(다른 오브젝트와 부딪혀 이동이 방해되는 등)의 발생을 막을 수 있다. 하지만 이번 프로젝트에서는 플레이어가 오브젝트를 물리적으로 밀칠 수 있게 하고 싶어서 이 방법은 사용하지 않았다.

  2. Rigidbody의 Freeze Rotation x, z를 비활성화 한다. 이 경우 Collider가 비벼지면서 경사면은 오를 수 있으나 여러 문제가 발생할 수 있다.

  3. Box -> Capsule collider로 변경 후 땅에서 떨어뜨린다. 오브젝트는 z축 방향을 정면으로 하기 때문에 앞뒤로 긴 형태의 오브젝트의 경우 Capsule의 Direction을 z-axis로 바꿔준다. Collider를 적절하게 조정해주면 충돌을 피할 수 있다.

  4. 충돌을 피하고 싶은 Object만 충돌 비활성화
    Edit - Project Settings - Physics - Layer Collision Matrix

profile
게임 개발 기록

0개의 댓글