적이 죽을때의 애니메이션과 체력바 숨기기를 구현해 볼 것이다.
5개의 사망 애니메이션을 Maximo에서 구해서 위와같이 몽타주를 만들었다.
사망 애니메이션 이후 쓰러진 모습을 잠시 남기기 위해서 각 사망애니메이션의 끝부분에서 애니메이션을 새로 만들었다.
5개의 사망 애니메이션과 각 애니메이션에서 끝부분을 떼어내서 만든 5개를 더해 총 10개의 애니메이션이다.
먼저 사망애니메이션이 어떤것이 재생되냐에 따라 쓰러진 모습이 정해져야 하므로 위와같이 Enum을 추가하였다.
Die 함수를 추가하였다.
플레이어 공격 몽타주와 같이 5개의 애니메이션 중 랜덤으로 재생되도록 하였다.
ABP에서 Enemy에 캐스트하여 변수로 만들었다.
이부분이 새롭게 알게된 내용인데 함수 오버라이드로 위와 같은 함수를 추가하고 Property Access를 추가하면 현 프로젝트에 존재하는 모든 것에 접근이 가능하다.
이 과정으로 기존에 했던 단순히 Tick에서 접근하는 것보다 좀더 안전하고 효율적으로 접근이 가능하다.
스테이트 머신을 추가한다.
항상 하던대로 Idle과 Dead를 추가하고 Idle에는 Idle 애니메이션을 넣어준다.
DeathPose Enum이 Alive가 아닐시 Dead 애니메이션으로 넘어가도록 한다.
BlendPose by EDeathPose로 각각 다른 애니메이션이 재생되도록 구성한다.
다음으로 맵에 존재하는 모든 몬스터의 체력바가 보이면 안되므로 가까이 접근하여 공격시에만 체력바가 보이고 이후 적으로부터 일정거리를 벗어나면 다시 체력바가 사라지도록 구현해 볼것이다.
적 사망시에는 체력바가 사라져야 하므로 위와같이 구성한다.
추가로 적 사망시 콜리전을 없애고 3초뒤 사라지도록 하였다.
시작시에는 안보이도록 설정한다.
다음으로 CombatTarget과 CombatRadius를 변수로 추가한다.
CombatTarget은 적 입장에서 플레이어를 인식하여 액터 포인터로 지정하는 변수이고 CombatRadius 체력바가 사라지는 반경으로 에디터에서 바꿀수 있도록 하였다.
데미지를 입을 시 CombatTarget을 이벤트 행위자로부터 가져와 저장한다.
매틱마다 검사하여 CombatTarget(플레이어)가 감지되었을 시 플레이어와의 거리를 측정하여 CombatRadius보다 멀어지면 CombatTarget을 nullptr로 바꾸고 체력바를 안보이도록 한다.
거리감을 보기위해 스피어 디버그를 추가하였다.
체력바가 시작시 안보이고 공격 적중시 보인다.
이후 거리가 멀어지면 다시 사라진다.
적 사망시 사망 애니메이션이 랜덤으로 재생되고 각 애니메이션에 맞게 바닥에 쓰러진 애니메이션까지 잘 동작한다.
'언리얼 - C++ 프로젝트' 카테고리의 다른 글
OpenWorldRpg (14) 체력바 구현 (0) | 2025.05.20 |
---|---|
OpenWorldRpg (13) 랜덤 아이템 소환 (0) | 2025.05.18 |
OpenWorldRpg (12) 프랙처모드 (0) | 2025.05.15 |
OpenWorldRpg (11) Hit Reaction (0) | 2025.05.13 |
OpenWorldRpg (10) 무기 히트박스 (0) | 2025.05.11 |