2025-06-16 TIL

알고리즘 문제

이번 문제도 DFS를 사용한 DP 문제였습니다.
이번 문제는 어떤 알고리즘을 사용해서 문제를 풀어내야할지 제대로 찾지 못해서 풀어내지 못했습니다.
DFS를 사용한다는 점까지는 파악했지만 DP를 활용해야한다는 것을 알아내지 못해서 풀어내지 못했습니다.
이전에 다른 문제들에서도 DP 관련 문제는 풀어내지 못했는데, DP에 대해서 학습할 필요가 있어보입니다.
[프로그래머스][C++] 숫자 타자 대회

최종 프로젝트

상호작용 애니메이션

기존에 구현한 상호작용 시스템에 상호작용시 관련된 애니메이션이 재생되면 더 좋을 것 같다라는 피드백을 받아서 해당 작업을 진행해보았습니다.

해당 작업은 기존에 구현한 상호작용 인터페이스에서 상호작용 애니메이션을 반환하도록 해주었습니다.
그렇기 때문에 해당 인터페이스를 상속받은 클래스에서는 어떤 애니메이션 몽타주를 재생시킬건지 반환해야합니다.
만약 없는 경우 nullptr을 반환하여 애니메이션을 재생하지 않고, 상호작용 애니메이션이 전달된 경우에는 재생하게 됩니다.

우선적으로 해당 시스템은 땅에 떨어진 아이템들을 주울 경우 정해진 몽타주를 재생하도록 해주었습니다.

기존에 잘 구현한 시스템을 활용했기 때문에 구현에 큰 어려움이 없었고 버그가 발생하는 경우도 없었습니다.
이제 어느정도 인터페이스를 사용해 시스템을 구현하는 것은 잘 적응이 된 것 같다고 느껴집니다.

강공격 및 콤보별 데미지 구현

강공격은 기존에 노말 공격을 하는 로직을 조금 수정하여 강공격에 대한 입력이 들어온 경우에도 공격이 되도록 처리를 해주었습니다.

기존 시스템에서 일부 로직만 수정해주어 시간은 오래걸리지 않았고, 구현에도 큰 어려움이 없었습니다.
하지만, 현재 공격 시스템에는 겹치는 로직이 좀 존재하는데 이를 최적화 할 수 있을지 고민이 좀 있습니다.

콤보별 데미지의 경우에는 무기에서 배열로 재생하는 몽타주와 데미지 값을 가지게 설정해주었습니다.
이것은 기존에 배열로 몽타주를 가지고 이것을 인덱스로 접근하면서 콤보 시스템을 구현하던 로직을 응용한 것입니다.

기존 콤보 시스템을 응용했기 때문에 각 콤보별 데미지를 구현하는 것 또한 어렵지 않았습니다.
다만 이 콤보 시스템도 겹치는 코드가 많은데, 이 부분도 리팩토링 할 수 있을지 한다면 어떤 부분을 어떻게 수정할지 고민이 있습니다.

기타 작업

이 외에 자잘한 버그와 기존에 구현했던 시스템들을 본격적으로 적용하는 작업을 진행해주었습니다.

구르기 입력시 캐릭터를 회전시키고 구르기 몽타주를 재생하는데, 회전하는 로직과 몽타주를 재생하는 로직의 조건식이 분리되어있어 몽타주를 재생하지 못해도 캐릭터가 회전하던 문제가 있었습니다.

이 문제는 코드의 실행 순서를 파악하여 가정을 해보았고, 중단점을 통해 사실확인을 해보면서 문제를 파악할 수 있었습니다.

이렇게 파악한 문제를 조건식을 하나로 합쳐서 몽타주를 재생한 경우에만 회전하도록 수정해주었습니다.

이외에 기존에 구현했던 시스템들을 적용하는 것은 이전에 구현한 몽타주 스킵을 이동, 공격 등 플레이어 캐릭터 행동과 관련된 로직에 적용해주었습니다.
이때, 현재로서 파악된 버그는 없습니다.


특정 애니메이션 슬롯이 재생 중인지 확인해야하는 로직이 있었습니다.

언리얼 엔진 포럼의 질문 글을 보고 어떤 함수를 사용하면 좋을지 답을 찾을 수 있었습니다.

[How to check if there is a montage playing in a given slot?]{https://forums.unrealengine.com/t/how-to-check-if-there-is-a-montage-playing-in-a-given-slot/377388/5}{: target=”_blank”}

IsSlotActive는 블렌드 중에는 false가 발생하므로, GetSlotLocalWeight를 사용하여 0인지 아닌지 판단하여 사용해보았습니다.

Date:     Updated:

카테고리:

태그:

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

댓글남기기