2025-05-14 TIL

알고리즘 문제

단어를 하나씩 변환한다는 개념을 알고리즘으로 구현한다는 것에 대해 어려움이 있었습니다.
이 부분을 해결했을 때 다른 부분은 크게 어렵지 않았습니다.
가장 적은 변환 횟수를 찾는다는 것이 길찾기에서 가작 짧은 길을 찾는 개념과 같다고 생각하여 BFS알고리즘을 사용해보았습니다.
결과적으로 문제는 잘 풀어낸 것 같습니다.
[프로그래머스][C++] 단어 변환

최종 프로젝트

오늘은 기능 구현 중 팀원의 버그에 대해 같이 트러블 슈팅을 진행했고, 제가 작업 중이던 기능에서도 버그가 발생해 해당 부분에 대해 해결해보고, 정리했습니다.

추가로 오늘은 상호작용 기능에 대해 구현해보았습니다.

Navigation InvokerBeginPlay에서 사용하려고 했지만, 작동하지 않는다는 문제가 있었습니다.

문제를 해결하기위해 사실을 파악하고, 원인을 추측해보아 조사해보고 결과를 확인해보았습니다.

제가 알게된 사실은 다음과 같습니다.

  • 생성자에서만 작동한다.
  • NavMeshVolume의 브러쉬 범위 안에서 작동한다.

우선 생성자가 아닌 BeginPlay에서 사용하려 했기 때문에 문제가 있었고, NavMeshVolume이 존재하지 않아 문제가 있었습니다.
이 문제를 해결한 뒤에는 Navigation Invoker가 의도대로 잘 작동하였습니다.

LineTrace

상호작용 기능을 위해서 LineTraceSingleByChannel을 사용했는데, 충돌이 발생하지 않는다는 문제가 있었습니다.

채널의 설정, 액터의 콜리전 설정에 문제가 있을 수 있다고 추측하고, 해당 문제에 대해서 조사를 했습니다. 하지만, 조사 결과 해당 부분에는 문제가 없었습니다.

다음으로 충돌체에 문제가 있을 수 있다고 추측하고, 해당 문제를 조사하기 위해서 BoxComponent를 사용해보았고, 이 경우 의도대로 동작하는 것을 알 수 있었습니다.

결과적으로 다음과 같은 사실을 알 수 있었습니다.
기존 액터에서는 스켈레탈 메시를 사용했는데, 이 스켈레탈 메시에 피직스애셋이 없어서 충돌이 발생하지 않았습니다.

스태틱 메시와 스켈레탈 메시의 경우 충돌체에 대해서 잘 신경써주어야함을 느꼈습니다.

상호작용 기능

상호작용 기능은 LineTraceSingleByChannel을 사용했습니다.

이 기능을 위해서 프로젝트 세팅의 콜리전에서 TraceChannelInteractTrace를 추가했고, PresetInteractable를 추가했습니다.

상호작용은 인터페이스를 사용해 상호작용 시 액터별로 다른 동작을 수행할 수 있도록 함수를 구현했습니다.

결과적으로 로직은 다음과 같습니다.

  • 매 틱 LineTraceSingleByChannel를 이용해 상호작용이 가능한 액터를 찾는다.
  • 플레이어의 입력으로 액터의 상호작용 로직을 실행한다.

프로토타이핑이라서 아직 UI에 대한 부분은 구현하지 않았는데, 추후에 퀄리티를 올리기 위해 추가적으로 UI를 구현할 예정입니다.
또한, 매 틱 LineTraceSingleByChannel를 하지않고, TimerHandle을 사용하여 특정 시간마다 동작을 하도록 구현하는 것 도 최적화에 영향을 주어 퀄리티를 올려볼 수 있을 것 같습니다.

후에 SphereTraceMultiByChannel를 사용하여 사용자 입장에서 편리하도록 좀 더 퀄리티를 올려볼 수 있을 것 같습니다.
해당 Trace에서 Hit된 액터들을 가져오고, 플레이어의 전방 방향에서 가장 가까운 액터와 상호작용 하도록 구현한다면 좀 더 사용자 입장에서 상호작용을 편하게 진행할 수 있을 것 같습니다.
이 방법은 퀄리티를 올리기 위한 기간에 팀원들과 이야기해보고 결정할 것 같습니다.

Date:     Updated:

카테고리:

태그:

TIL 카테고리 내 다른 글 보러가기

댓글남기기