[TIL] 2026-01-28 | UE 게임 루프 및 UI 재설계 과제, 화면 뒤집기

2026. 1. 28. 21:23·내배캠Unreal_TIL/UE
C++와 Unreal Engine으로 3D 게임 개발 과제 8

 

1. WHY

이번 과제에서는 아래 2가지 흐름을 함께 재설계 + 확장할 것입니다.

  • 게임 플레이: 아이템 인터페이스 + 멀티 웨이브 구조를 개선 / 게임의 재미를 UP!
  • UI/UX: HUD/메뉴 전면 리뉴얼 / 시각적 완성도와 인터랙션 UP!

 

2. WHAT

- 멀티 웨이브 구성

Wave 1에서 다량의 코인 스폰은 고민중..!

- UI 분석 및 재설계

Lv 1 -> Stage 1 변경

시간 카운트 다운 애니메이션 효과 추가

하단 HP 바 추가

 

종료 버튼 추가

애니메이션 또는 이미지 추가

 

3. HOW

- 멀티 웨이브 구현

기존 레벨 구성은 StartLevel() -> OnLevelTimeUp() -> EndLevel() 이었다.

이제 여기서 웨이브를 3개로 나눠줘서

StartLevel() -> StartWave1() -> StartWave2() -> StartWave3() -> OnLevelTimeUp() -> EndLevel() 으로

호출하도록 흐름을 변경 했다.

 

다음은 각 Wave마다 이벤트를 추가해야 한다.

 

Wave2: 화면 180도 회전

패들패들패들이라는 게임에서 화면이 돌아가는 구간이 있는데 이걸 넣어보면 재밌을 것 같았다.

 

PlayerController에서 회전 -> 실패 🫠

Character에서 SpringArmComp 회전 -> 오류 많음 🤯

Character에서 CameraComp 회전 -> 성공 🥰

 

void ASpartaCharacter::RollCamera()
{
	if (!CameraComp) return;
    UE_LOG(LogTemp, Warning, TEXT("Roll Camera"));


	RollTarget = CameraComp->GetRelativeRotation();
	RollTarget.Roll += 180.f;

	GetWorldTimerManager().SetTimer(
		RollTimerHandle,
        this,
		&ASpartaCharacter::UpdateRollCamera,
		0.016f,
		true
	);
}
void ASpartaCharacter::UpdateRollCamera()
{
	if (!CameraComp || !GetWorld())
	{
		GetWorldTimerManager().ClearTimer(RollTimerHandle);
		return;
	}

	FRotator Cur = CameraComp->GetRelativeRotation();
	FRotator NewRot = FMath::RInterpTo(
		Cur,
		RollTarget,
		GetWorld()->GetDeltaSeconds(),
		6.f
	);

	CameraComp->SetRelativeRotation(NewRot);

	if (FMath::Abs(NewRot.Roll - RollTarget.Roll) < 0.5f)
	{
		CameraComp->SetRelativeRotation(RollTarget);
		GetWorldTimerManager().ClearTimer(RollTimerHandle);
	}
}

먼저 플레이어 캐릭터 클래스에서 카메라 컴포넌트를 회전시키는 함수와 타이머를 통해 회전 애니메이션 함수를 만들었다.

 

더보기
현재 → 목표 회전 보간

FMath::RInterpTo

Cur 현재 카메라 Roll
RollTarget 목표 Roll (±180°)
DeltaSeconds 프레임 독립
6.f 회전 속도 (클수록 빠름)

RollCamera()
 → RollTarget 설정
 → 타이머 시작
 → UpdateRollCamera() 반복
     → RInterpTo로 Roll 보간
     → 목표 도달 시 타이머 종료

더보기

괜히 SpringArmComp 회전 시키려다가 삽질 엄청했다.

SpringArmComp->bUsePawnControlRotation = true; 인걸

굳이굳이 false로 바꿔서 회전되도록 하고 다시 돌아오면 true해서 하려니까

마우스 입력에 따른 회전이 안먹어서 카메라 컴포넌트를 수정하는걸로 바꿨다. 진작 그럴걸!!!!!!! 😂

void ASpartaGameState::RollingCamera()
{
    // 카메라 회전
    if (APlayerController* PC = UGameplayStatics::GetPlayerController(this, 0))
    {
        if (APawn* Pawn = PC->GetPawn())
        {
            if (ASpartaCharacter* Character = Cast<ASpartaCharacter>(Pawn))
            {
                Character->RollCamera();
            }
        }
    }
}

그리고 GameState에서 카메라 회전을 담당하는 함수를 만들어서

Wave2에서 호출해서 뒤집고

Wave3에서 다시 호출해서 원상복구 되도록 했다.

 

버그 고치느라 시간 많이 걸려서 Wave 3구현은 다음 시간에 ~!

특정 아이템 스폰 함수를 만들어서 지뢰 밭, 코인 밭으로 만들어 봐야겠다.

 

4. TROUBLE

- 죽은 객체 접근

다음 레벨이 넘어가는 시점에서 예외가 발생했다.

예외 발생(0xFFFFFFFFFFFFFFFF, UnrealEditor.exe): 0xC0000005: 0xFFFFFFFFFFFFFFFF 위치를 실행하는 동안 액세스 위반이 발생했습니다..
void ASpartaGameState::StartWave3()
{
    // 30s
    UE_LOG(LogTemp, Warning, TEXT("Start Wave3"));

    TArray<AActor*> FoundVolumes;
    UGameplayStatics::GetAllActorsOfClass(GetWorld(), ASpawnVolume::StaticClass(), FoundVolumes);

// ... 생략

    GetWorldTimerManager().SetTimer(
        LevelTimerHandle,
        this,
        &ASpartaGameState::OnLevelTimeUp,
        30.0f,
        false
    );
}

원래 StartWave3() 타이머에서 바로 EndLevel()을 호출하도록 했다.

그러니 타이머가 완전히 끝내기도 전에 EndLevel로 파괴되어 타이머 정리 순서가 깨졌다!!!! 

❌ 직접 EndLevel
“엘리베이터가 아직 움직이는데 케이블을 직접 끊어버림”

✅ OnLevelTimeUp 경유
“엘리베이터가 멈춘 다음 관리자가 전원 내림”
void ASpartaGameState::OnLevelTimeUp()
{
    EndLevel();
}

 

OnLevelTimeUp()은 단순히 EndLevel()을 호출하는 역할만 한다고 생각해서 생략했던건데

실제로는 타이머 콜백의 종료 지점과 레벨 파괴 시점을 분리해주는 중요한 역할을 하고 있었다.

 

타이머 콜백 안에서 바로 EndLevel()을 호출하면 엔진이 아직 쓰고 있는 World를 부수는 꼴이 되고,
한 단계 우회하면 파괴가 안전한 시점으로 밀린다. ⭐⭐⭐

 

- 파티클 재생 중에 다음 레벨로 넘어갈 때 예외 처리

이 문제는 어제도 MineItem에서 똑같은 상황이 있었기 때문에 쉽게 해결했다.

BaseItem의 파티클도 똑같이 수정해줬다. 

 

[TIL] 2026-01-27 | UE UI 애니메이션 및 3D 위젯 구현, 파티클과 사운드 게임 효과 연출

C++와 Unreal Engine으로 3D 게임 개발 4-3,4UMG와 AnimationUMG에는 Animation 기능이 탑재되어있다. 다양한 연출을 쉽게~! bbbAnimation 패널UMG 에디터 내에서 메뉴 상단에서 Window - Animations를 클릭하면 애니메이

zzageuli.tistory.com

 

 

5. NEXT

Wave 3구현

특정 아이템 스폰 함수

UI

 

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

C++와 Unreal Engine으로 3D 게임 개발 과제 8 1. WHAT [TIL] 2026-01-28 | UE 게임 루프 및 UI 재설계 과제, 화면 뒤집기C++와 Unreal Engine으로 3D 게임 개발 과제 8 1. WHY이번 과제에서는 아래 2가지 흐름을 함께 재

zzageuli.tistory.com

 


Video to Gif

https://ezgif.com/video-to-gif

 

Video to animated GIF converter

Upload your video, select the part you want to convert and instanlty create a GIF in good quality for free and without watermarks.

ezgif.com

 

'내배캠Unreal_TIL > UE' 카테고리의 다른 글

[TIL] 2026-01-30 | Post Process로 흐림 효과 구현, 감속, 최종 완성  (2) 2026.01.30
[TIL] 2026-01-29 | 아이템 스폰 이벤트, UI 디자인  (2) 2026.01.29
[TIL] 2026-01-27 | UE UI 애니메이션 및 3D 위젯 구현, 파티클과 사운드 게임 효과 연출  (0) 2026.01.27
[TIL] 2026-01-26 | UE UI 위젯 설계  (1) 2026.01.26
[TIL] 2026-01-26 | Attribute System  (0) 2026.01.26
'내배캠Unreal_TIL/UE' 카테고리의 다른 글
  • [TIL] 2026-01-30 | Post Process로 흐림 효과 구현, 감속, 최종 완성
  • [TIL] 2026-01-29 | 아이템 스폰 이벤트, UI 디자인
  • [TIL] 2026-01-27 | UE UI 애니메이션 및 3D 위젯 구현, 파티클과 사운드 게임 효과 연출
  • [TIL] 2026-01-26 | UE UI 위젯 설계
윤윤씨
윤윤씨
🎮 내일배움캠프 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-28 | UE 게임 루프 및 UI 재설계 과제, 화면 뒤집기
상단으로

티스토리툴바