언리얼 - C++ 프로젝트

Shooter - (4) 데미지 및 적 사망 이벤트 구현

earth-star 2024. 10. 9. 16:26

적에게 체력을 부여하고 데미지를 입혀 체력이 0이하가 되면 사망하는 이벤트를 구현해볼 것이다.

블프에서도 보았던 언리얼에서 제공하는 TakeDamage 함수를 사용할 것이다.

 

정의는 위와 같다.

 

위의 정의에서 Struct 타입의 FDamageEvent가 있는데 이를 위해 따로 변수를 만들어줘야한다.

데미지 이벤트에는 FPointDamageEvent와 FRaidalDamageEvent가 있는데 이 중 FPointDamageEvent를 사용할 것이다.

Gun.cpp에서 라인트레이스에서 적중한 대상을 GetActor()로 가져와 HitActor로 저장하였다.

 

FPointDamageEvent 타입의 DamageEvent를 만들었다.

 

이후 HitActor에서 TakeDamage 함수를 호출한다.

ShooterCharacter에서 TakeDamage 함수를 오버라이드한다.

MaxHealth를 100으로 설정하였고 Damage를 10으로 설정하였다.

 

TakeDamage 함수 호출시마다 10의 데미지를 체력에서 빼도록한다.

 

함수 호출시마다 체력을 Ulog로 로그에 출력되도록 하였다.

다음으로 사망 애니메이션을 넣어야한다.

 

애니메이션 블프에서 Bool 타입의 IsDead 변수를 만들고 BlendPosesByBool 함수로 분기를 나눈다.

블프에서의 IsDead와 C++파일에서의 변수를 연동하기 위해서 ShooterCharacter에 IsDead 함수를 만든다.

위와같이 return을 하면 체력이 0이하가 되면 자동으로 Ture가 된다.

캐릭터에서 IsDead를 불러와 블프에서의 IsDead에 Set 해준다.

 

맞출 때마다 체력이 줄고 0이되면 사망 애니메이션이 재생되는 것을 볼 수 있다.