게임프로그래밍/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를 띄우는 것에 성공했다.