[TIL] 2025-05-14 알고리즘 문제, 최종 프로젝트 기능 구현 및 트러블 슈팅
2025-05-14 TIL
알고리즘 문제
단어를 하나씩 변환한다는 개념을 알고리즘으로 구현한다는 것에 대해 어려움이 있었습니다.
이 부분을 해결했을 때 다른 부분은 크게 어렵지 않았습니다.
가장 적은 변환 횟수를 찾는다는 것이 길찾기에서 가작 짧은 길을 찾는 개념과 같다고 생각하여 BFS알고리즘을 사용해보았습니다.
결과적으로 문제는 잘 풀어낸 것 같습니다.
[프로그래머스][C++] 단어 변환
최종 프로젝트
오늘은 기능 구현 중 팀원의 버그에 대해 같이 트러블 슈팅을 진행했고, 제가 작업 중이던 기능에서도 버그가 발생해 해당 부분에 대해 해결해보고, 정리했습니다.
추가로 오늘은 상호작용 기능에 대해 구현해보았습니다.
Navigation Invoker
Navigation Invoker
를 BeginPlay
에서 사용하려고 했지만, 작동하지 않는다는 문제가 있었습니다.
문제를 해결하기위해 사실을 파악하고, 원인을 추측해보아 조사해보고 결과를 확인해보았습니다.
제가 알게된 사실은 다음과 같습니다.
- 생성자에서만 작동한다.
NavMeshVolume
의 브러쉬 범위 안에서 작동한다.
우선 생성자가 아닌 BeginPlay
에서 사용하려 했기 때문에 문제가 있었고, NavMeshVolume
이 존재하지 않아 문제가 있었습니다.
이 문제를 해결한 뒤에는 Navigation Invoker
가 의도대로 잘 작동하였습니다.
LineTrace
상호작용 기능을 위해서 LineTraceSingleByChannel
을 사용했는데, 충돌이 발생하지 않는다는 문제가 있었습니다.
채널의 설정, 액터의 콜리전 설정에 문제가 있을 수 있다고 추측하고, 해당 문제에 대해서 조사를 했습니다. 하지만, 조사 결과 해당 부분에는 문제가 없었습니다.
다음으로 충돌체에 문제가 있을 수 있다고 추측하고, 해당 문제를 조사하기 위해서 BoxComponent
를 사용해보았고, 이 경우 의도대로 동작하는 것을 알 수 있었습니다.
결과적으로 다음과 같은 사실을 알 수 있었습니다.
기존 액터에서는 스켈레탈 메시를 사용했는데, 이 스켈레탈 메시에 피직스애셋이 없어서 충돌이 발생하지 않았습니다.
스태틱 메시와 스켈레탈 메시의 경우 충돌체에 대해서 잘 신경써주어야함을 느꼈습니다.
상호작용 기능
상호작용 기능은 LineTraceSingleByChannel
을 사용했습니다.
이 기능을 위해서 프로젝트 세팅의 콜리전에서 TraceChannel
로 InteractTrace
를 추가했고, Preset
에 Interactable
를 추가했습니다.
상호작용은 인터페이스를 사용해 상호작용 시 액터별로 다른 동작을 수행할 수 있도록 함수를 구현했습니다.
결과적으로 로직은 다음과 같습니다.
- 매 틱
LineTraceSingleByChannel
를 이용해 상호작용이 가능한 액터를 찾는다. - 플레이어의 입력으로 액터의 상호작용 로직을 실행한다.
프로토타이핑이라서 아직 UI에 대한 부분은 구현하지 않았는데, 추후에 퀄리티를 올리기 위해 추가적으로 UI를 구현할 예정입니다.
또한, 매 틱 LineTraceSingleByChannel
를 하지않고, TimerHandle
을 사용하여 특정 시간마다 동작을 하도록 구현하는 것 도 최적화에 영향을 주어 퀄리티를 올려볼 수 있을 것 같습니다.
후에 SphereTraceMultiByChannel
를 사용하여 사용자 입장에서 편리하도록 좀 더 퀄리티를 올려볼 수 있을 것 같습니다.
해당 Trace
에서 Hit
된 액터들을 가져오고, 플레이어의 전방 방향에서 가장 가까운 액터와 상호작용 하도록 구현한다면 좀 더 사용자 입장에서 상호작용을 편하게 진행할 수 있을 것 같습니다.
이 방법은 퀄리티를 올리기 위한 기간에 팀원들과 이야기해보고 결정할 것 같습니다.
댓글남기기