[UE4] Niagara 충돌처리 (FOnNiagaraSystemFinished)
💥 나이아가라 충돌처리
나이아가라의 충돌 처리는 두 가지 방식이 있다.
나이아가라 자체가 HitData를 갖는 방법과 SubAction에서 HitData를 전달해주는 방법이 있다.
그 중 나는 나이아가라(ACAura) 자체가 HitData를 갖는 방법으로 충돌처리를 구현하였다.
이전 학습 시간에는 나이아가라를 출력하기 위한 ACAura 클래스를 작성했었고, 해당 클래스안에 데미지 처리를 위한 FHitData와 DamageInterval, UBoxComponent를 선언해뒀었다.
나이아가라의 충돌은 BoxComponent의 Overlap을 이용하여 구현하였다.
OnComponent Begin/End Overlap 함수에서는 충돌된 캐릭터를 Hitted 배열에 추가하거나 삭제해주었다.
Hitted 배열은 지속적인 충돌처리로 데미지를 입힐 캐릭터들을 담은 변수이다.
BeginPlay 함수에서는 Box Component의 Overlap 델리게이트를 등록시키고, 충돌된 캐릭터들에게 지속적으로 데미지를 입히기 위해 Timer 델리게이트를 람다식으로 등록해주었다.
🚨 이때 주의할 점은 나이아가라 시스템인 ACAura에서 데미지를 주는 Timer를 생성했다는것이다.
Timer를 생성해둔 채, 나이아가라 시스템을 삭제하거나 꺼지면 Timer는 해제되지 못하고 계속 실행되고, 결국엔 Timer가 참조하는 나이아가라의 Null로 인해 오류가 발생하게 된다.
따라서 이를 해결하기위해 ACAura 클래스의 EndPlay에서 Timer를 삭제하는것도 좋지만, 나이아가라의 파티클이 끝났을 때를 찾아서 Timer를 삭제하는 방법으로 구현해보았다.
UNiagaraComponent 클래스에는 나이아가라의 파티클이 끝난지를 알 수 있는 FOnNiagaraSystemFinished 델리게이트가 존재한다. 이를 이용하여 Damage Timer를 삭제해보았다.
ACAura에 OnSystemFinished 함수를 만들어 타이머를 지우고, Aura 클래스를 지우는 삭제 코드를 작성하였고,
BeginPlay에서 OnSystemFinished 델리게이트를 등록해주었다.