개요
오늘은 Line Trace를 이용한 상호작용 시스템을 구현했다. 플레이어가 E 키를 눌렀을 때 눈앞의 오브젝트를 감지하고, 문과 상호작용하여 열고 닫을 수 있도록 만들었다. 단순히 문을 여는 기능을 구현하는 것뿐만 아니라, Timeline을 이용해 자연스러운 회전을 적용하고, 현재 문의 상태를 변수로 관리하면서 상태에 따라 다른 동작이 실행되도록 구성했다. 또한, 구현 과정에서 발생한 문제들을 직접 디버깅하면서, 기능을 만드는 것뿐만 아니라 원인을 분석하고 해결하는 과정도 함께 경험할 수 있었다.
구현 과정
① E 키 입력으로 상호작용 구현
E 키 입력
→ Line Trace 실행
② 문 액터와 상호작용 연결
Line Trace로 감지된 액터를 BP_InteractableDoor로 Cast
→ 문 액터 내부의 ToggleDoor 이벤트를 호출

③ 문 열기와 닫기 구현
IsOpen 변수 이용 현재 문의 상태를 저장
→ Branch를 통해 문이 닫혀 있으면 열고, 열려 있으면 닫도록 구현
→ Timeline과 Reverse From End를 사용하여 문이 자연스럽게 열리고 닫히도록 구현


ToggleDoor
↓
Branch(IsOpen)
False
→ IsOpen = True
→ Play From Start
True
→ IsOpen = False
→ Reverse From End
Timeline과 Lerp(Rotator)를 이용하여 문이 자연스럽게 회전하도록 구현했다.

④ 문제 해결 과정
처음에는 Timeline Length가 5초로 설정되어 있어 문을 닫을 때 반응이 늦게 시작되는 문제가 발생했다. Timeline Length를 1초로 수정하여 해결했다.
또한, 문이 한쪽에서만 상호작용되는 문제가 발생했다. Draw Debug를 통해 Line Trace를 확인해본 결과, Trace 길이를 20으로 설정해 너무 짧게 사용하고 있었음을 발견했다.
End = Start + Forward Vector × 20
으로 설정했을 때는 Trace가 거의 보이지 않을 정도로 짧았기 때문에,
End = Start + Forward Vector × 200
으로 수정하여 양쪽에서 정상적으로 문과 상호작용할 수 있도록 해결했다.



후기
이번 퀘스트를 진행하면서 기능을 구현하는 것만큼이나 문제를 해결하는 과정이 중요하다는 것을 느꼈다. 문을 열고 닫는 기능 자체는 비교적 단순했지만, Timeline 길이나 Line Trace 거리처럼 작은 설정 하나가 전체 동작에 큰 영향을 줄 수 있다는 점을 직접 경험할 수 있었다. 또한, Draw Debug를 통해 Line Trace의 방향과 길이를 눈으로 확인하면서, 머릿속으로만 원인을 추측하기보다 실제 동작을 확인하며 문제를 좁혀나가는 과정이 훨씬 효율적이라는 것을 알 수 있었다. 기능을 완성하는 것보다 문제가 발생했을 때 원인을 분석하고 해결하는 과정에서 더 많은 것을 배울 수 있었다.
앞으로는 문 하나만 구현하는 데 그치지 않고, 현재 구조를 확장하여 아이템, 레버, 상자 등 다양한 오브젝트와 상호작용할 수 있는 공통 시스템으로 발전시켜 보고 싶다. 또한 Print String이나 Draw Debug 같은 디버깅 도구를 적극적으로 활용하는 습관을 들여 문제를 체계적으로 해결하는 능력을 키워나가고 싶다.
'언리얼 엔진 > TIL' 카테고리의 다른 글
| TIL - 베이스캠프 12일차 (0) | 2026.06.24 |
|---|---|
| TIL - 베이스캠프 11일차 (0) | 2026.06.22 |
| TIL - 베이스캠프 9일차 (0) | 2026.06.18 |
| TIL - 베이스캠프 8일차 (0) | 2026.06.17 |
| TIL - 베이스캠프 7일차 (0) | 2026.06.16 |