2025-05-12 TIL

알고리즘 문제

오늘 처음 3레벨 문제를 풀어보았습니다.
문제 설명을 보고 바로 자료구조 문제라는 것과 우선순위 큐 두개를 사용해볼 수 있다는 것을 알 수 있었습니다.
하지만 그것보다 좋은 방법이 있을 것 같아서 고민을 해봤는데 multiset을 생각해냈고, 잘 풀어낼 수 있었습니다.
3레벨 문제를 생각했던 것보다 쉽게 느껴서 자신감이 좀 붙을 수 있었던 문제입니다.
[프로그래머스][C++] 이중우선순위큐

최종 프로젝트

오늘은 최종 프로젝트에서 다음과 같은 작업을 진행했습니다.

패키징 문제

SetActorLabel함수가 패키징에서 문제가 됐습니다.
패키징시 해당 함수로 에러가 발생한다고 로그 출력에서 볼 수 있어서 문제가 된다는 점을 바로 알 수 있었습니다.
에디터 환경에서는 문제없이 작동하므로, 에디터 환경에서만 작동할 수 있는 방법을 찾아보려고 시도했습니다.
결과적으로 #if WITH_EDITOR를 알게됐고, 이를 사용하여 에디터 환경에서만 사용하면서, 패키징에서는 제외하도록 했습니다.

TakeDamge 및 관련 로직 구현

플레이어 캐릭터의 TakeDamage를 구현하였습니다.

해당 함수를 구현하면서 체력을 감소하고, 0이 됐을 경우 다음과 같은 로직을 구현했습니다.

  • 플레이어 캐릭터가 더 이상 충돌될 수 없도록 콜리전 변경
  • 사망 애니메이션을 재생
  • 바인드 된 입력 제거

콜리전 변경을 위해서 WorldStatic과 WorldDynamic만 충돌하고 나머지는 모두 무시하는 콜리전을 추가하는 작업을 했습니다.

무기 액터 구현

무기 액터를 구현했습니다.

액터는 스켈레탈 메시를 가지고자 했는데, 애셋이 스태틱 메시라서 Convert to Skeletal Mesh라는 기능을 사용해 스켈레탈 메시로 변환해보았습니다.

무기 액터는 다음과 같은 정보를 가지게 구현했습니다.

  • 전환하고자하는 애님 인스턴스를 가진다.
    • 이 애님 인스턴스는 애니메이션 레이어 인터페이스를 사용하고있습니다.
  • 콤보 공격에 대한 몽타주를 가집니다.

해당 무기 액터는 Attach Actor To Component를 사용하여 플레이어 캐릭터의 특정 소켓에 부착되도록 구현했습니다.
하지만, Location Rule, Rotation Rule, Scale RuleKeep Relative를 사용했는데, 해당 액터가 사라지는 것 처럼 보이는 문제가 있었습니다.
이 문제는 원인을 추측하지 못했는데, 해결하기 위해 다양한 키워드로 구글링해본 결과 다음과 같은 문제가 있을 수 있다고 합니다.

  • 액터의 월드 위치가 부모 컴포넌트 기준으로 이동하기 때문에 부모 컴포넌트에 따라 액터의 위치가 전혀 달라질 수 있다.
  • 부모 컴포넌트의 스케일이 너무 작다면 액터가 영향 받아 거의 보이지 않을 수 있다.

등이 있었고, 이외에도 문제가 더 있을 수 있었지만 다른 문제는 저에게 해당되지 않는 다고 가정하고 범위를 축소해보았습니다.

우선 저 위에 두가지 사항에 대해서 살펴보고자 다음과 같은 방법을 시도했습니다.

Keep Relative로 인해 상대 위치 혹은 상대 스케일 등을 유지하려해서 문제가 됐다고 생각하고, 해당 설정을 Snap to Target으로 변경해보았습니다.
이 방법을 시도해보자마자 바로 문제가 해결됐습니다.

이번 문제에서는 다음과 같은 행동이 좋은 결과를 만들어낸 것 같습니다.

  • 원인을 추측해내지는 못했지만, 원인이 될 수 있는 경우를 살펴보아 경우의 수를 잘 수집한 점
  • 경우의 수를 잘 정리해내 빠르게 시도해볼 수 있는 부분부터 살펴본 점

Date:     Updated:

카테고리:

태그:

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

댓글남기기