언리얼엔진5/FPS 게임 1인 프로젝트

[UE5 FPS 프로젝트] 3. HUD 및 피격 구현

Rocketbabydolls 2024. 6. 13. 11:49

HUD

 

    HUD는 위젯 블루프린트를 통해 구현 했습니다. 

아래의 화면처럼 구성을 하였고, 함수 바인딩을 통해 값이 업데이트 되도록 했습니다.

 

HUD

 

    아래의 방식대로 위 허드의 위젯에 함수를 바인딩 했는데, 이 방법은 틱마다 위젯이 업데이트 되어 성능에 영향을 줄 수 있습니다. 따라서 조만간 프로퍼티가 업데이트 되었을 때만 위젯의 값을 변경하는 방식으로 리팩토링 할 예정입니다.

 

프레임마다 실행되는 바인딩 된 함수



크로스헤어 위젯

 

크로스헤어 위젯은 막대 4개로 구성되어 있는데, 상 하 좌 우 크로스헤어가 존재합니다. 각각의 크로스헤어는 FInterpTo 를 통해 부드럽게 보간되는데, 원리는 다음과 같습니다.

    위쪽 크로스헤어를 기준으로 설명합니다.

     1. 현재 Position의 Y좌표를 가져옵니다. (상하좌우의 크로스헤어는 화면 정중앙에 정렬 해 놓았음)

.    2. 보간을 통해 -현재속도값 까지 보간을 시도합니다. 

     3. Clamp를 통해 크로스헤어가 움직일 수 있는 값을 제한해 줍니다.

(UpperBound -> -80  Lowerbound-> -25)

     4. 상하좌우 모두 같은 로직으로 구성해줍니다.

 

크로스헤어 위젯

 

 

     위 과정들을 통해서 아래처럼 HUD 를 구성할 수 있습니다.

실행 화면

 

 

    그리고 추후 Weapon들의 확장성을 고려해 Weaponbase에 구현해놨던 내용들을 AVIAKWeapon으로 옮기고, Weaponbase는 추상화를 통해 무기에 공통적으로 포함되는 프로퍼티들만 base에 선언하고, 각각 다른 프로퍼티 혹은 함수가 필요한 경우 해당 클래스에서 구현하도록 순수 가상함수를 선언했습니다.

 

UClass(Abstract) 는 클래스를 추상 베이스 클래스로 만들어 월드에 배치할 수 없게 만들지만 상속받은 자식 클래스가 추상형이 아니라면 월드에 배치할 수 있습니다.

 

PURE_VIRTUAL 과 Abstract 를 통한 순수 가상 함수 선언 및 추상화

 

 

코드 양이 많아진다는 단점이 있지만, 무기 별로 설정해야 할 메쉬, 애니메이션, 사운드, 사운드 설정 등이 상이하기 때문에 불가피 했습니다.

 

 

사운드 재생

 

UGameplayStatics를 통해 사운드를 재생 할 수 있었습니다. 총 발사, 장전 사운드 등을 추가했습니다. Volume 과 Pitch 는 랜덤 함수를 통해 동일하게 들리지 않도록 구현했습니다.

 

if (UWorld* World = GetWorld())
{
	APlayerController* PC = UGameplayStatics::GetPlayerController(World, 0);

	if (PC)
	{
		AVICharacter* Character = Cast<AVICharacter>(PC->GetCharacter());
		if (Character)
		{
			if (!Character->GetbIsReloading())
			{
				AmmoCount--;

				/* Play Sound */
				UGameplayStatics::PlaySoundAtLocation(this,
					GunShotWav,
					Character->GetCamera()->GetComponentLocation(),
					FMath::RandRange(0.7f, 1.2f) + 2.5f,
					FMath::RandRange(0.7f, 1.2f),
					0.0f,
					AKSoundAttenuationSettings,
					AKSoundConcurrencySettings);

				Mesh->PlayAnimation(FireActionAnimation, false);


				/* Start Line Tracing */
				LineTrace();


			}
		}

	}

}

 

 

실행 영상

 

 

 

 

레퍼런스

 

 

언리얼 추상 클래스, 순수 가상 함수 사용법

하나 이상의 순수 가상 메소드(pure virtual method)를 포함하는 클래스기본 구현이 없는 가상(virtual) 함수.반드시 상속받은 자식 클래스에서 해당 순수 가상 함수를 재정의(override) 시켜줘야 한다.실

velog.io