게임프로그래밍/TheZombie
게임 개발 - 사망 처리(2)
설련
2022. 2. 7. 19:11
플레이어 사망 이후, 우리는 근거지로 되돌아갈 것인지 재도전할 것인지를 파악해야 한다.
우선 던전 구현이 아직 미비하므로 UI를 생성하는 기능을 구현해보았다.
죽는 모션에 노티파이를 추가.
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnDunGeonEnd);
//...
UCLASS(config=Game)
class ATheZombiesCharacter : public ACharacter
{
GENERATED_BODY()
//게임이 끝이라는 델리게이트를 정의.
public:
FOnDunGeonEnd OnDunGeonEnd;
};
void UCharacterAnimInstance::AnimNotify_Death() {
Owner->OnDunGeonEnd.Broadcast();
}
//노티파이 함수를 AnimInstance로 정의하여 노티파이를 받는다
(애님인스턴스는 애님노티파이 형식을 통해 자동으로 호출하는 델리게이트가 있다).
void ACurrentUseWidget::ShowUIWidget(class ATheZombiesCharacter* Player) {
CrossHair->AddToViewport();
auto PlayerStatus = Player->GetPlayerStatus();
PlayerStatus->OnSetHP.AddDynamic(Cast<UUIWidget>(StateUI), &UUIWidget::SetHPbarPercentage);
PlayerStatus->OnSetSP.AddDynamic(Cast<UUIWidget>(StateUI), &UUIWidget::SetSPbarPercentage);
PlayerStatus->OnEquipWeapon.AddDynamic(Cast<UUIWidget>(StateUI), &UUIWidget::EquipWeapon);
StateUI->AddToViewport();
Player->OnDunGeonEnd.AddDynamic(this, &ACurrentUseWidget::ShowDunGeonEndWidget);
}
//플레이어 스탯말고도 플레이어와도 연동되어야 하므로 상위 객체를 파라미터로 변경한다.
void ACurrentUseWidget::ShowDunGeonEndWidget() {
StateUI->RemoveFromViewport();
CrossHair->RemoveFromViewport();
DunGeonEndUI->AddToViewport();
PlayerOwner->SetInputMode(FInputModeUIOnly());
}
//던전이 끝날 경우 End UI를 화면에 보여주도록 한다.
이렇게 UI를 띄우는 것에 성공했다.