AnyDamage 호출 시 체력 감소
먼저 BP_Character에서 LifeMax의 기본값을 100으로 설정 후, Construction Script를 통해 LifeNow에 미리 값을 넣어준다.
그리고 BP_Weapon의 ApplyDamage가 불리게 되면 LifeNow에서 들어온 Damage만큼 빼주기만 하면 된다.
이상한 충돌판정 수정해주기
1. 무기를 들고있는 Player가 본인 무기에 대미지를 입는 문제
ActorBeginOverlap 이벤트로 받아온 충돌한 대상과 현재 Controll 중인 대상이 다를 때에만 ApplyDamage를 발생시키도록
중간에 Branch를 추가하여 True일 때만 넘어가도록 했다.
2. 무기가 닿기만 하면 적에게 대미지를 주는 문제
Player의 공격 애니메이션에 맞춰서 무기의 Capsule Collision을 켰다 꺼주는 방식으로 해결해볼 것이다.
먼저 Controll 대상의 현재 상태가 Acting인지 확인을 위해 Is State를 추가하여 공격 중이 아닐 때에는 대미지가 발생하지 않는다.
3. 한번의 공격에 여러번 대미지가 들어가는 문제
먼저 AnimNotify를 추가해줄 것이다. 블루프린트 클래스 - AnimNotifyState를 선택하여 생성한다.(ANS_AttackActivated)
이렇게 만든 AnimNotifyState(ANS_AttackActivated)에서 사용할 함수 Begin과 End만 추가했다.
그리고 Notify(ANS_AttackActivated)에서 Begin과 End 발생 시 호출시켜줄 인터페이스 함수 2개를 추가했다.
이제 AnimNotifyState(ANS_AttackActivated)의 Begin과 End 함수 발생 시 각각 인터페이스 함수를 호출하여
BP_Character로 전달되게 된다.
이후, BP_Character에서 이벤트 발생하면 Weapon으로 넘겨주며 BP_Weapon안의 Activate / DeactivateAttack 함수를
불러줄 것이다.(따라서 Activate / DeactivateAttack 두개의 함수를 추가 / 구현해준다.)
Generate Overlap Events를 껏다 켜주면서 충돌이 발생하도록 해주었다.
이를 위해 GenerateOverlapEvents의 초기값은 꺼두어야 한다.
아까 만들었던 ANS_AttackActivated Notify는 Attack Montage에 각각 공격 판정이 시작되고 끝날 프레임에 맞게 위치를
설정해주면 된다.
이제 Montage 재생 시, 해당 프레임의 Notify에 Begin / End가 발생하며 무기의 Overlap Events를 껐다 켜줄 것이다.
4. 장착하지 않은 무기가 대미지를 주는 문제
인터페이스에서 만들었던 함수 Activate / Deactivate Attack 이벤트 발생 시, WeaponNow에 있는 함수만 발생되도록
로직을 구현해주었다.
'언리얼엔진' 카테고리의 다른 글
29. 맵(Map) / Create Dynamic Material Instance (0) | 2023.06.14 |
---|---|
28. 세트 컨테이너 / 시퀀스 노드 / 공격 시 충돌 수정 (0) | 2023.06.13 |
26. 콜리전 프리셋 / Object Type / Apply Damage / AnyDamage (1) | 2023.06.09 |
25. Hit / Physics Simulation / Delta Seconds (0) | 2023.06.07 |
24. 머티리얼 / Construction Script / Overlap (0) | 2023.06.06 |