이제 헤일로가 깨지게 하기 위해서는 Halo 클래스의 BreakHalo 함수를 호출하기만 하면 된다.
void AKannaCharacter::Die()
{
GetMesh()->SetCollisionEnabled(ECollisionEnabled::NoCollision);
DisableInput(UGameplayStatics::GetPlayerController(GetWorld(), 0));
ZoomOutCamera();
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
if (AnimInstance && DieMontage)
{
PlayDieMontage(AnimInstance);
}
Halo->BreakHalo();
SpringArm->SocketOffset = FVector::UpVector * 30.f;
SpringArm->TargetArmLength = 100.f;
}
KannaCharacter의 Die함수에 BreakHalo 호출을 만들고, 사망 시의 카메라 시점도 조정해주었다.
이제 화면 연출을 만들 차례이다.
단순히 헤일로가 깨지고 쓰러질 때, 시야를 잃도록 할 것이다.
이를 위해서, 간단히 KannaTPSOverlay에 화면을 꽉 채우는 검은 이미지를 만들고, 평시 Visibility를 Hidden으로 하였다.
KannaTPSOverlay에 이 이미지를 활성화시키는 함수를 만들 것이다.
// KannaTpsOverlay.h
/*생략*/
UPROPERTY(meta = (BindWidget))
UImage* DeadScreen;
void UKannaTPSOverlay::SetDeadScreen()
{
DeadScreen->SetVisibility(ESlateVisibility::Visible);
}
이 함수도 KannaCharacter에서 호출할 것이다.
void AKannaCharacter::SetDeadScreen()
{
KannaTPSOverlay->SetDeadScreen();
DamageIndicator->SetVisibility(ESlateVisibility::Hidden);
GetGameInstance()->GetSubsystem<UGameManager>()->ChangeDefaultVolume(0.f);
}
AKannaCharacter::SetDeadScreen은 BlueprintCallable로 선언해두어서, Animation Notify를 통해 호출될 수 있다.
마지막으로 사망 시 음소거까지 해줄 것이다.
AKannaCharacter::SetDeadScreen 함수의 마지막 줄에 이것이 있었다.
GetGameInstance()->GetSubsystem<UGameManager>()->ChangeDefaultVolume(0.f);
UGameManager는 게임 진행에 관련된 데이터를 다루는 싱글톤 클래스가 될 것이다.
UGameManager.h:
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "GameManager.generated.h"
/**
*
*/
UCLASS()
class KANNATPS_API UGameManager : public UGameInstanceSubsystem
{
GENERATED_BODY()
public:
void ChangeDefaultVolume(float volume);
};
.cpp:
// Fill out your copyright notice in the Description page of Project Settings.
#include "GameManager.h"
// Change the volume of the default SoundClass
void UGameManager::ChangeDefaultVolume(float volume)
{
const FSoftObjectPath DefaultSoundClassName = GetDefault<UAudioSettings>()->DefaultSoundClassName;
if (!DefaultSoundClassName.IsValid())
return;
USoundClass* masterSoundClass = LoadObject<USoundClass>(nullptr, *DefaultSoundClassName.ToString());
if (masterSoundClass == nullptr)
return;
masterSoundClass->Properties.Volume = volume;
}
언리얼 엔진 5에서는 UGameInstanceSubsystem을 상속받은 클래스를 만듦으로써 손쉽게 싱글톤 클래스를 만들 수 있다.
테스트 영상:
https://www.youtube.com/watch?v=cH15sAAbQx0&ab_channel=Ciel45
'언리얼 엔진 5 > 개발 일지' 카테고리의 다른 글
[UE5] 블루아카이브 TPS게임 개발일지 (61) - 대사 시스템 (Typewriter 효과) (0) | 2024.02.21 |
---|---|
[UE5] 블루아카이브 TPS게임 개발일지 (60) - GameManager로 적 관리 (0) | 2024.02.17 |
[UE5] 블루아카이브 TPS게임 개발일지 (58) - 사망 연출 제작 2 (0) | 2024.02.16 |
[UE5] 블루아카이브 TPS게임 개발일지 (57) - 사망 연출 제작 (Geometry Collection) (0) | 2024.02.16 |
[UE5] 블루아카이브 TPS게임 개발일지 (56) - EX 스킬 제작 4 (0) | 2024.02.04 |