[TIL] 2026-01-29 | 아이템 스폰 이벤트, UI 디자인

2026. 1. 29. 21:53·내배캠Unreal_TIL/UE
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
'내배캠Unreal_TIL/UE' 카테고리의 다른 글
  • [TIL] 2026-02-03 | 머티리얼 실습 PBR 재질 만들기
  • [TIL] 2026-01-30 | Post Process로 흐림 효과 구현, 감속, 최종 완성
  • [TIL] 2026-01-28 | UE 게임 루프 및 UI 재설계 과제, 화면 뒤집기
  • [TIL] 2026-01-27 | UE UI 애니메이션 및 3D 위젯 구현, 파티클과 사운드 게임 효과 연출
윤윤씨
윤윤씨
🎮 내일배움캠프 Unreal 7기
  • 윤윤씨
    컴퓨터온열맛사지
    윤윤씨
  • 전체
    오늘
    어제
    • 분류 전체보기 (62) N
      • 내배캠Unreal_TIL (62) N
        • C++ (23)
        • UE (31) N
        • 팀프로젝트 (7)
      • etc (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
    • Solved.ac
    • YouTube
  • 태그

    ta
    코드카타
    오토마타
    STL
    챌린지
    프로그래머스
    머티리얼
    언리얼과제
    스테이트머신
    디자인패턴
    gas
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.6
윤윤씨
[TIL] 2026-01-29 | 아이템 스폰 이벤트, UI 디자인
상단으로

티스토리툴바