[TIL] 2025-06-19 팀원 코드 리팩토링, 컴포넌트의 월드 좌표 및 상대 좌표 계산, 나이아가라 재생 문제
2025-06-19 TIL
최종 프로젝트
팀원 코드 리팩토링
한 팀원에게 UI 중 보스 HP바를 구현하는 업무를 분배했었습니다.
그런데 해당 HP바 구현중 코드 컨벤션과 맞지 않고, 코드가 정리되지 않은 부분이 많아 해당 부분을 리팩토링 했습니다.
델리게이트를 사용하거나 구조를 수정하는 등 리팩토링을 진행했는데, 기존 코드 컨벤션으로 작성되지 않고 주석또한 없어서 코드를 수정하는데에 어려움이 있었고, 시간 또한 오래 걸렸었습니다.
이번 리팩토링 경험으로 코드를 이해하기 쉽게 작성하며, 코드 컨벤션을 잘 지키는 것에 대한 중요성을 느꼈습니다.
컴포넌트의 월드 좌표 및 상대 좌표 계산
무기를 따라 Trail
하는 기능의 VFX를 적용해보았습니다.
해당 Trail
용도의 나이아가라의 크기가 너무 크거나 무기에 따라서 너무 작은 경우가 있었습니다.
이를 해결하기 위해서 크기 및 위치를 변경할 필요가 있었습니다.
크기와 위치는 기존에 충돌체로 사용하던 박스 컴포넌트를 사용하여 크기와 위치를 설정해주고자 했습니다.
크기의 경우 박스 컴포넌트의 크기를 가져와서 나이아가라를 Z축으로 크기 변경해주었습니다.
위치를 설정하는 것에 어려움이 조금 있었는데, 위치의 경우에는 박스 컴포넌트의 위치를 기준으로 박스의 크기만큼 Z축으로 감소시켜야했습니다.
그리고 이렇게 찾은 위치값은 월드를 기준으로한 좌표이기 때문에, 나이아가라 컴포넌트의 상대 위치 기준으로 변경하여 사용해보았습니다.
이렇게 크기와 위치를 계산하여 적용할 때, GetScaledBoxExtent
, InverseTransformPosition
함수 등을 사용하여 계산해주었습니다.
나이아가라에 값을 적용하는 것은 나이아가라 컴포넌트의 SetFloatParameter
를 사용하여 설정해주었습니다.
나이아가라 재생 문제
애니메이션 중에 특정 노티파이 스테이트에서 Trail
나이아가라 컴포넌트를 Activate
하거나 DeActivate
해주었습니다.
그런데 이렇게 작업을 했을 때, Trail
나이아가라가 굉장히 이상하게 그려지는 문제가 발생했습니다.
이 문제를 추측하고 알아본 결과 나이아가라가 재생되다 멈추고, 다시 재생하기 시작했을 때 이전에 재생중이던 나이아가라와 함께 이어져서 재생되기 때문에 발생한 문제였습니다.
이를 해결하기 위해서 Trail
만을 위한 노티파이 스테이트를 구현해주었는데, 한 애니메이션 몽타주에서는 문제가 해결될 수 있었지만 다른 몽타주와 연결되어 재생하는 경우 같은 문제가 발생했습니다.
다른 방법으로 몽타주 자체에서 이미 존재하는 노티파이 스테이트 중에서 Trail
용도로 사용하는 스테이트가 있는데 이 스테이트의 경우에는 몽타주에 속한 노티파이 스테이트로 나이아가라의 크기나 위치의 값을 넘겨줄 수 없다고 판단하여 사용하지 않았습니다.
마지막으로 선택한 방법은 나이아가라를 직접 스폰하고, 특정 컴포넌트에 부착하여 재생되도록 해주었습니다.
그 결과 나이아가라의 재생이 자연스럽게 보이도록 잘 적용 되었습니다.
이렇게 문제는 해결 되었지만, 나이아가라를 직접 반복해서 스폰하기 위해 UNiagaraFunctionLibrary::SpawnSystemAttached
를 사용하여 나이아가라를 스폰해주었습니다.
스폰한 나이아가라가 제거되어 메모리를 반환하도록 하기 위해 AutoDestroy
를 true
설정해주었습니다.
하지만, 반복 재생되는 나이아가라의 경우 자동적으로 Destory
되지 않기 때문에 직접 타이머를 설정하여 제거되도록 설정해주었습니다.
댓글남기기