참고영상 : https://www.youtube.com/watch?v=OIcqe4ad5oA&ab_channel=%EC%98%A4%EB%8A%98%EC%BD%94%EB%94%A9
유니티의 네비게이션이 버전이 업데이트 되면서 기능을 추가하고 불편한 부분을 개선 한 것 같다
네비게이션에대한 Bake를 동적으로 할 수 있게 되었고
지형에 대해 static을 체크해주지 않아도 지형으로 인식하게 되었다
이제 2022버전 이상이라면 AI Navigation을 유니티 패키지에서 다운받아주면 된다
컴포넌트 종류 정리
컴포넌트 종류는 크게 5가지가 있다
1. NavMeshAgent : 네비게이션을 이용해 움직일 물체
2. NavMeshObstacle : 장애물로 인식하게 될 물체 (뭔가 NavMeshModifier 하위호환? 느낌)
3. NavMeshLink : 갈수 없는 길을 연결 시킬때 사용
4. NavMeshModifier&NavMeshModifierVolume : 움직일 수 있는 바닥의 설정 할 때 사용됨
5. NavMeshSubface : 네비게이션 지도를 그려줄 때 사용되고 Agent에 대한 땅의 Bake를 담당한다
대표적인 2가지 1번(NavMeshAgent), 2번, 6번(NavMeshSubface)만 살펴 보겠다
1. NavMeshAgent
움직일 물체에게 컴포넌트를 추가해준다
AgentType을 다르게 해서 움직일 수 있는 땅의 기울기나 Agent크기나 높이등을 바꿀 수 있다
좌표가 있다면 해당 좌표로 움직일 때 스피드, 회전력, 가속도, 도착완료거리를 성정 할 수 있고
다른 Agent가 있다면 다른 Agent을 피해갈지 밀어내면서 갈지에 대한 우선순위 등등이 있다
Auto Braking : true라면 도착전에 감속해서 자연스럽게 속도 0으로 도착하고, false라면 딱 멈춘다
AgentType은 아래 그림인 Window > AI > Navigation 메뉴에 있는 창에서 생성 할 수 있다
이곳에선 움직일 Agents의 크기, 높이 등 뚱뚱한지 호리한지를 지정해서 갈수 있는지 없는지 설정하게 해준다
2. NavMeshObstacle
장애물 오브젝트에 컴포넌트를 추가해준다
Carve를 체크해주는걸 까먹지 말자(체크안하면 Agent는 물체를 통과하려고 애쓴다)
6. NavMeshSurface
네비게이션의 지도를 그려주는 친구, 빈 오브젝트에 추가해준다
여기서 Bake로 네비게이션에 대한 맵을 생성할 수 있고
Collect Objects의 Volume을 이용하면 해당 부분 만큼 베이크를 할 수 있게 할 수 있다
신기했던 것
1. NavMeshSurface의 동적 Bake 기능
ClickMove.cs
해당 컴포넌트를 Player오브젝트에 추가해주면 nms.BuildNavMesh(); 를 호출하면 Bake가 동적으로 계속 된다는것
지금은 Surface와의 거리가 멀어지면 위치를 다시 Player에 옮겨서 Player위치에서 다시 Bake하는 방식 이지만
나중에 무한맵이나 오브젝트로 길을 막을때 한번씩 Bake 해주면 연산을 아낄 수 있을 것 같다
계속되는 Bake 렉이 안걸리는데 괜찮을지도?
2. NavMeshModifier의 Agent를 구분지어 지형으로 할지 통과하게 할지에 대한 기능
가로막을 지형을 생성하기위해 NavMeshModifier를 지정해주고 RemoveObject로 만들고 Humanoid로 설정하면
해당 Agent는 통과하게 된다 (Agent 중복 체크 가능)
만약 아무 Agnet도 설정하지 않는다면
그대로 막혀서 통과하지 못하게 된다(다른 Agent 지정해 둿다면 그 Agent는 통과 가능)
뭔가 다른 캐릭터만 들어갈 수 있는 비밀의 방 같은걸 만들 때 유용할 것 같다 ㅋㅋ
'Unity' 카테고리의 다른 글
유니티 사운드 매니저 (0) | 2023.12.10 |
---|---|
AOSFogWar (0) | 2023.12.03 |
Dotween 맛보기 (0) | 2023.12.03 |
UGS 맛보기 (0) | 2023.11.20 |
공간 채워넣기 알고리즘 (1) | 2023.09.17 |