본문 바로가기

언리얼 엔진(Unreal Engine)/UE5

[UE5] ApplyDamage가 두 번 적용될 때

반응형

 

네, 이번 글의 주제는 제목 그대로.. 블루프린트의 ApplyDamage라는 함수가 있습니다. 이녀석이 왜 2번 실행되서 짜증나게 만들까요..?

 

우선 ApplyDamage 함수를 봅시다.

 

 

바로 요놈이죠..

프로젝트를 진행하다가 왜?만 수십번 외치게 만든 주인공입니다.

ApplyDamage는 서버에서만 실행이 되어 특정 액터에게 데미지를 줍니다.

 

이녀석이 무슨 일이 있었냐면은.. 아래와 같이 공격을 하면, 가장 가까이에 있는 적에게 데미지를 주도록 하였습니다.

정확히는, 공격 애니메이션이 끝나갈 때 쯤 데미지를 주도록 했습니다.

 

 

저는 당연히 10의 데미지만 주고 끝날것이라고 생각했는데, 10의 데미지를 2번 주더군요?

 

 

https://forums.unrealengine.com/t/blueprint-apply-damage-fires-twice-from-client/486902

포럼에 올라온 답변에 따르면 서버 1콜리전, 클라이언트 1콜리전으로 총 2번 ApplyDamage를 호출한다고 하는데...

switch has authority를 추가해서 authority일 경우 실행하라는데, 저는 해도 안되더군요.

 

그래서 저는 다른 방법을 찾아야 했습니다.

 

아래는 제가 시도한 방법입니다. 위의 방법으로 해결 되었다면 굳이 진행하지 않으셔도..?

 

적의 블루프린트에서 셀프 - 디테일 - 액터에 가면 대미지 받기 가능 여부가 있습니다.

 

 

이것이 true인 상태일 때만 액터는 대미지를 받을 수 있습니다. 저는 이것을 공격키를 눌렀을 때 잠깐 켜주고 대미지를 받는 순간 바로 꺼주려고 합니다. 그러니 지금은 이걸 해제 해줍니다.

 

그리고 아래와 같이 대미지 받기 가능 여부를 true로 만드는 이벤트를 하나 만들어줍니다.

 

 

대미지 받기 가능 여부 변수는 리플리케이트된 변수이기 때문에 서버에서 실행시켜주도록 합시다.

이것을 이제 데미지를 주기 전에 실행시켜 주도록 합니다. 저는 애니메이션 중간에 애님 노티파이로 설정했으니, 그 사이에 끼워줬습니다.

 

 

이렇게 말이죠.

이제 몬스터 블루프린트에서 데미지를 받았을 때 다시 false로 돌려주도록 설정해줍니다.

 

이제 결과를 확인해 볼까요?

 

 

원했던 대로 이제 데미지가 한 번만 들어갑니다.

 

 

저와 똑같은 문제로 고통받으셨던 분들, 이제 고통 받지 마시고 해결할 수 있으시길 바라겠습니다..

 

 

 

보충이 필요한 부분이나 틀린점, 궁금한 점 있으시면 댓글로 남겨주세요!

 


 

 

728x90