언리얼 엔진 5/개발 일지

[UE5] 블루아카이브 TPS게임 개발일지 (59) - 사망 연출 제작 3

ciel45 2024. 2. 16. 21:34

이제 헤일로가 깨지게 하기 위해서는 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를 통해 호출될 수 있다.

 

 

Die 애니메이션 시퀀스에 LoseSight 노티파이 추가
노티파이에서 KannaCharacter의 Set Dead Screen 호출

 

 

 

마지막으로 사망 시 음소거까지 해줄 것이다.

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