Level Design & Navigation: Nav Mesh Bounds Volume을 통해 캐릭터가 움직일 수 있는 길을 시각화하고 제어하는 법을 배웠습니다.
Line Trace Interaction: 캐릭터의 시선 방향으로 보이지 않는 레이저를 쏴서 물체와 충돌시키고, 그 정보를 가져오는 상호작용의 기본 원리를 익혔습니다.
Dynamic Navigation: Movable 액터의 움직임에 따라 내비게이션 영역이 실시간으로 업데이트되는 Runtime Generation(Dynamic) 설정을 학습했습니다.
Blueprint Logic: Timeline 노드를 활용해 딱딱한 움직임 대신 부드러운 회전 애니메이션을 구현했습니다.
2. 구현 과정 요약
① 맵 구성 및 내비게이션 시각화
먼저 벽과 바닥을 배치하고 마을 분위기의 에셋들을 배치했습니다. 캐릭터가 이동 가능한 구역을 확인하기 위해 내비메쉬를 적용했습니다.
핵심 설정: 프로젝트 세팅에서 Runtime Generation을 Dynamic으로 변경하여, 문이 열렸을 때 캐릭터가 지나갈 수 있는 길이 실시간으로 생성되도록 했습니다.
② 상호작용 범위 구현 (Line Trace)
E 키를 눌렀을 때 캐릭터 위치(Start)에서 정면 방향(End)으로 레이저를 발사합니다.
로직: Get Actor Forward Vector를 이용해 캐릭터가 바라보는 방향으로 선을 그려 상호작용 대상을 감지합니다.
③ 상호작용 실행 (문 열기 & 파괴하기)
Break Hit Result를 통해 맞은 액터의 태그를 확인합니다.
문(Door): Timeline과 SetRelativeRotation을 사용해 부드럽게 열립니다.
그 외: 아이템 줍기 대신, 태그가 없는 물체는 모두 Destroy Actor로 파괴되도록 설정했습니다.
문이 Movable로 설정되어 있어 열리는 순간 내비메쉬가 업데이트되어 통과가 가능해집니다.
태그가 없는 모든 오브젝트를 파괴하게 만들었더니 예상보다 훨씬 타격감 있는(?) 씬이 연출되었습니다.
3. 느낀 점 & 개선하고 싶은 점
[느낀 점] 단순히 콜리전만 막는다고 캐릭터가 못 지나가는 게 아니라, 내비메쉬라는 별도의 '길 찾기 데이터'가 중요하다는 것을 깨달았습니다. 특히 문이 돌아가지 않을 때 에러 메시지를 보고 '모빌리티(Movable)' 설정을 바꿔야 한다는 점을 배운 것이 큰 수확이었습니다.
[개선하고 싶은 점]
정교한 예외 처리: 지금은 모든 것을 파괴하지만, 나중에는 특정 아이템만 인벤토리에 들어오도록 로직을 세분화하고 싶습니다.
사운드 및 이펙트: 물체가 파괴될 때 폭발 이펙트나 소리를 추가해 피드백을 강화해보고 싶습니다.