TIL

[UE5] 에셋 배치부터 실시간 상호작용 시스템까지

think95592 2026. 4. 15. 17:18

1. 오늘 배운 핵심 개념

  • 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)' 설정을 바꿔야 한다는 점을 배운 것이 큰 수확이었습니다.

[개선하고 싶은 점]

  • 정교한 예외 처리: 지금은 모든 것을 파괴하지만, 나중에는 특정 아이템만 인벤토리에 들어오도록 로직을 세분화하고 싶습니다.
  • 사운드 및 이펙트: 물체가 파괴될 때 폭발 이펙트나 소리를 추가해 피드백을 강화해보고 싶습니다.