내일배움캠프_언리얼9기

내일배움캠프 47일차 TIL 2026/06/29

begin-play 2026. 6. 29. 21:03

✔ TIL (오늘 핵심 정리)

1. 웨이브 시스템 구조

  • GameState에서 CurrentWaveIndex, RemainingTime으로 웨이브 관리
  • Timer로 1초 단위 업데이트
  • 웨이브 종료 시 다음 웨이브로 전환 또는 클리어 처리

2. 액터 전체 제어 (TActorIterator)

  • 레벨 안 특정 타입 액터를 전부 탐색하는 기능
  • 예: 모든 LavaFloor 속도 변경
 
for (TActorIterator<ALavaFloor> It(GetWorld()); It; ++It)
{
    It->SetRiseSpeed(값);
}
 
  • “단발성 전체 변경”에 적합

3. 충돌 시스템 정리

  • Physics는 반드시 RootComponent에 적용
  • Mesh에 Physics 걸면 구조 깨짐 (바닥 뚫림 문제 발생)
  • 데미지는 Overlap 또는 Hit 이벤트로 처리
  • LaunchCharacter로 넉백 구현 가능

4. 웨이브 연동 스폰 구조

  • BallSpawner 여러 개 관리 시 TArray<ABallSpawner*> 사용
  • GetAllActorsOfClass 또는 Iterator로 초기 등록
  • WaveIndex에 따라 활성/비활성 제어

5. 클리어 시스템 구조

  • 클리어 전용 맵 (ClearLevel) 생성
  • GameMode에서 UI 생성 후 Viewport 추가
  • UMG로 점수, 버튼, 배경 구성
  • GameInstance로 점수 유지

6. UI 구조 (UMG + C++)

  • Widget Blueprint = 디자인
  • C++ Widget = 기능 (점수, 버튼 이벤트)
  • BindWidget으로 UI 요소 연결

7. 입력 모드 문제 해결

  • 레벨 이동 시 PlayerController 설정 유지됨
  • ClearLevel에서는 반드시 다시 설정 필요
 
bShowMouseCursor = true;
SetInputMode(UIOnly);
 

8. GameInstance 주의점

  • 레벨 이동해도 유지됨
  • 하지만 코드에서 TotalScore = 0 하면 초기화됨
  • “초기화 위치” 반드시 관리 필요

✔ 핵심 한 줄 요약

👉 “게임 구조는 GameState(진행), GameInstance(데이터 유지), GameMode(UI), Actor(기능)으로 역할을 나눠야 안정적이다”