핵심 정리
csharp
using UnityEngine.AI;
agent.SetDestination(target.position);구조 이해
- Unity 내비게이션의 핵심은 "걷기 가능한 표면"과 "그 표면 위를 움직이는 agent"를 분리해서 생각하는 것입니다.
NavMeshSurface가 세계의 길을 만들고,NavMeshAgent가 그 길 위에서 경로를 찾고 따라갑니다. - Unity 6 기준 AI Navigation 패키지는 편집 시점과 런타임 모두에서 navmesh를 구축하고, obstacle과 link를 사용해 더 실제적인 이동 경로를 만들게 도와줍니다.
NavMeshAgent는 단순히 목표 지점만 주면 움직이는 편리한 컴포넌트지만, 정지 거리, 회전, 가속, 장애물 회피, path pending 같은 상태를 함께 이해해야 예상 가능한 캐릭터가 됩니다.NavMeshObstacle은 움직이는 장애물을 피하게 만들거나 carve를 통해 길을 막게 할 수 있고, link는 점프, 사다리, 문 통과처럼 단순 평면 보행으로 표현되지 않는 연결을 담당합니다.- 결국 NavMesh는 "AI 이동 기능 하나"가 아니라 레벨 구조, agent 크기, 경로 허용 규칙, 특수 이동 연결을 묶는 시스템입니다. 레벨과 캐릭터 규격이 함께 설계돼야 안정적으로 동작합니다.
체크포인트
| 상황 | 적합한 선택 |
|---|---|
| 걸을 수 있는 영역 정의 | NavMeshSurface bake |
| AI 캐릭터에 목적지 지정 | agent.SetDestination(targetPos) |
| 움직이는 장애물 회피 | NavMeshObstacle (carve 옵션) |
| 점프·사다리·문 통과 경로 | NavMesh Link 설정 |
| NavMesh 이상 동작 디버깅 | agent 크기·통로 폭·bake 설정 먼저 확인 |
주의할 점
NavMesh 경로 이상 동작의 상당수는 agent 크기와 bake 설정 불일치에서 옵니다. 코드보다 설정을 먼저 확인하세요.
text
// ❌ 에이전트가 좁은 통로를 통과 못 함 → SetDestination 오류로 단정
agent.SetDestination(targetPos);
// → pathStatus: PathPartial (경로 일부만 계산됨)
// ✅ bake 설정 점검 순서
1. NavMeshAgent.radius vs 통로 폭 확인
- 통로 폭이 radius*2 미만이면 경로 없음으로 처리됨
2. Bake 설정 (Navigation > Bake):
- Agent Radius: 캐릭터 반경과 일치하는가?
- Max Slope: 계단/경사 허용 각도 맞는가?
3. NavMeshSurface 재bake 후 재테스트참고 링크
3 sources