C++와 Unreal Engine으로 3D 게임 개발 과제 8
1. WHAT
[TIL] 2026-01-28 | UE 게임 루프 및 UI 재설계 과제, 화면 뒤집기
C++와 Unreal Engine으로 3D 게임 개발 과제 8 1. WHY이번 과제에서는 아래 2가지 흐름을 함께 재설계 + 확장할 것입니다.게임 플레이: 아이템 인터페이스 + 멀티 웨이브 구조를 개선 / 게임의 재미를 UP!UI
zzageuli.tistory.com
지난 시간 기획을 바탕으로 이번에는 다량의 특정 아이템 스폰 구현 및 UI 수정을 진행 하고자 한다.
2. HOW
- 다량의 지뢰 아이템 스폰
void SetDelay(float NewDelay) { ExplosionDelay = NewDelay; }
먼저 레벨에 따른 난이도 조절을 위해 MineItem에 폭발 딜레이 값을 수정할 수 있는 함수를 정의했다.
AActor* ASpawnVolume::SpawnMine(float Delay)
{
if (!MineClass) return nullptr;
AMineItem* Mine = GetWorld()->SpawnActor<AMineItem>(
MineClass,
GetRandomPointInVolume(),
FRotator::ZeroRotator
);
if (Mine)
{
Mine->SetDelay(Delay);
}
return Mine;
}
그리고 SpawnVolume에서 지뢰를 스폰하고 딜레이 값을 조절하는 함수를 정의해주었다.
const int32 ItemToSpawn = 100;
for (int32 i = 0; i < ItemToSpawn; i++)
{
if (FoundVolumes.Num() > 0)
{
ASpawnVolume* SpawnVolume = Cast<ASpawnVolume>(FoundVolumes[0]);
if (SpawnVolume)
{
AActor* SpawnedActor = SpawnVolume->SpawnMine(2.0f-(0.5* CurrentLevelIndex));
}
}
}
Wave 3 에서 기존에 랜덤 아이템 스폰이 아닌 SpawnMine을 할 수 있도록 했다.
레벨 별로 2초 > 1.5초 > 1초 로 수정하기 위해 CurrentLevelIndex값으로 0.5 씩 감소시키도록 했다.
아이템 스폰량은 추후에 난이도 체크해서 수정해야 할 것 같다.

그리고 기존 지뢰랑 Wave3을 위한 지뢰를 분리해서 색도 구분시켜줬고 데미지 범위도 늘릴 생각이다.

일단 100개 스폰된 모습이다.
- HUD UI 수정
일단 기획...

코드에서 숫자만 출력되도록 수정 후 WBP_HUD에서 이미지 배치를 해준다.


Wave 애니메이션은 Rotation으로 흔들림 표현을 해줬다.

레벨업 표시는 RenderOpacity로 나타났다 사라지기..

그래프로가서 Event를 추가해준다. Wave2Anim / Wave3Anim / LevelUpAnim

이벤트가 끝나면 Hidden 처리를 해서 숨겼다.
void ASpartaPlayerController::ShowGameWave2()
{
UFunction* PlayAnimFunc = HUDWidgetInstance->FindFunction(FName("Wave2Anim"));
if (PlayAnimFunc)
{
HUDWidgetInstance->ProcessEvent(PlayAnimFunc, nullptr);
UE_LOG(LogTemp, Warning, TEXT("Wave2Anim Played"));
}
}
void ASpartaPlayerController::ShowGameWave3()
{
UFunction* PlayAnimFunc = HUDWidgetInstance->FindFunction(FName("Wave3Anim"));
if (PlayAnimFunc)
{
HUDWidgetInstance->ProcessEvent(PlayAnimFunc, nullptr);
}
}
void ASpartaPlayerController::ShowLevelUp()
{
UFunction* PlayAnimFunc = HUDWidgetInstance->FindFunction(FName("LevelUpAnim"));
if (PlayAnimFunc)
{
HUDWidgetInstance->ProcessEvent(PlayAnimFunc, nullptr);
}
}
PlayerController에서 애니메이션 실행 함수를 만들어줬다.
// 위젯 이벤트 호출
if (APlayerController* PlayerController = GetWorld()->GetFirstPlayerController())
{
if (ASpartaPlayerController* SpartaPlayerController = Cast<ASpartaPlayerController>(PlayerController))
{
SpartaPlayerController->ShowGameWave2();
}
}
그리고 GameState에서는 애니메이션이 필요할 때 함수를 호출했다.


UI는 Level Up 이라고 하는데 위에 Stage라고 나오니 이상해서 다시 수정 해줘야겠다...
- 체력바 구현

Progress Bar 를 HUD에 추가해준다.
이제 퍼센트를 계산해서 HP를 표시해주면 된다.
void ASpartaCharacter::UpdateOverheadHP()
{
// 머리 위 > HUD 체력바 변경
if (APlayerController* PlayerController = GetWorld()->GetFirstPlayerController())
{
if (ASpartaPlayerController* SpartaPlayerController = Cast<ASpartaPlayerController>(PlayerController))
{
if (UUserWidget* HUDWidget = SpartaPlayerController->GetHUDWidget())
{
if (UProgressBar* HPBar = Cast<UProgressBar>(HUDWidget->GetWidgetFromName(TEXT("HPBar"))))
{
HPBar->SetPercent(Health / MaxHealth);
}
}
}
}
}
UpdateOverheadHP() 함수에서 HUD 업데이트를 하도록 수정해줬다.

함수명도 맞지 않으니 UpdateHP()로 변경

지뢰 맞으면 체력바 업데이트 되는 것을 확인할 수 있다.
- 메인 메뉴 종료 버튼 추가하기
이건 간단하게 블루프린트로 구현하려고 한다.

Start 버튼 복붙해주고 On Clicked 이벤트를 추가한다.

버튼 소리도 추가해서 Delay 1초 후 시작 / 종료 되도록 했다.
디자인도 추가해줬다.

위젯 여러개는 Overlay를 통해 그룹화 시켜줬다.

- 레벨 디자인



- 데이터 테이블 수정 및 아이템 스폰 수정
난이도 조절을 위해 조정..
3. TROUBLE

처음에 짰던 블루프린트 이벤트 로직이다.
애니메이션이 끝나면 뒤에 Hidden이 호출될거라 착각했다.
그래서 화면에 나오지 않아 여러 시도를 많이 했는데 보여주자마자 숨겨버려서 그랬다. 하하 🤯
여러시도들...
코드에서 이벤트를 호출하는 타이밍 문제인줄 알고 여러곳에서도 호출하고 로직도 바꾸고 별짓 다했는데
블루프린트에서 실수였다 😂

이것도 이상한 짓 중에 하나...함수 안에서 함수가 끝날때 로직을 짜는 멍청한 짓
아무튼 위에서 한 것 처럼 구현하면 이벤트가 잘 나온다!!


4. NEXT
부정아이템 2개 추가
[TIL] 2026-01-30 | Post Process로 흐림 효과 구현, 감속, 최종 완성
C++와 Unreal Engine으로 3D 게임 개발 과제 8 1. WAHT부정 아이템 2가지 추가 2. HOW- 시야 제한 아이템 + 데미지먹으면 5초 시야 흐려짐 먼저 BaseItem을 상속받아 Poison 아이템 클래스를 생성한다.#include "Pois
zzageuli.tistory.com
5. 참고
<a href="https://www.flaticon.com/kr/free-icons/" title="메트로놈 아이콘">메트로놈 아이콘 제작자: Freepik - Flaticon</a>
<a href="https://www.flaticon.com/kr/free-icons/" title="폭탄 아이콘">폭탄 아이콘 제작자: tulpahn - Flaticon</a>
<a href="https://www.flaticon.com/kr/free-icons/" title="잃다 아이콘">잃다 아이콘 제작자: tulpahn - Flaticon</a>
<a href="https://www.flaticon.com/kr/free-icons/" title="보너스 아이콘">보너스 아이콘 제작자: tulpahn - Flaticon</a>
<a href="https://www.flaticon.com/kr/free-icons/" title="동전 아이콘">동전 아이콘 제작자: Heykiyou - Flaticon</a>
<a href="https://www.flaticon.com/kr/free-icons/-" title="- 아이콘">- 아이콘 제작자: Freepik - Flaticon</a>
'내배캠Unreal_TIL > UE' 카테고리의 다른 글
| [TIL] 2026-02-03 | 머티리얼 실습 PBR 재질 만들기 (2) | 2026.02.03 |
|---|---|
| [TIL] 2026-01-30 | Post Process로 흐림 효과 구현, 감속, 최종 완성 (2) | 2026.01.30 |
| [TIL] 2026-01-28 | UE 게임 루프 및 UI 재설계 과제, 화면 뒤집기 (1) | 2026.01.28 |
| [TIL] 2026-01-27 | UE UI 애니메이션 및 3D 위젯 구현, 파티클과 사운드 게임 효과 연출 (0) | 2026.01.27 |
| [TIL] 2026-01-26 | UE UI 위젯 설계 (1) | 2026.01.26 |