카테고리 없음

TIL 6일차 - UE5 FPS 게임 개발 (적 탐지, 게임 오버, 보스몹, 포탈, 상점 시스템), GitHub 기초

lsh021026 2026. 7. 3. 21:00
 
 
 
 
 
 
 
 
TIL 

1. 적이 플레이어를 탐지하면 경고 표시 띄우기

AI 캐릭터(BP_Ant)가 플레이어를 인지했을 때 화면에 알림을 띄우는 기능을 구현했다.

  • AI Perception 컴포넌트나 Line Trace/Sphere Overlap으로 플레이어 감지
  • 감지 성공 시 On Target Perception Updated 이벤트나 커스텀 Detect Player 함수 호출
  • HUD 위젯(WB_MainHUD)에 있는 경고 이미지(느낌표 아이콘 WBP_AlerIcon 같은)의 Visibility를 Visible로 전환
  • 일정 시간 후 다시 Hidden으로 돌리려면 Delay 노드나 Timer 활용

포인트는 AI 쪽(BP_Ant)에서 이벤트가 발생했을 때, HUD는 별도 위젯이므로 Get Player Controller → Get HUD → Cast 하거나, 게임 인스턴스/게임 모드를 경유해서 위젯 참조를 가져와야 한다는 것. AI가 HUD 위젯을 직접 들고 있지 않기 때문에 이 참조 전달 구조를 짜는 게 핵심이었다

 

2. 체력 0 이하일 때 게임 패배 화면 띄우기

BP_Character의 체력 변수가 0 이하로 떨어지는 순간을 감지해서 "게임 패배!!!" 텍스트를 띄우는 로직을 만들었다.

  • 데미지를 받는 함수(Apply Damage 처리 부분) 안에서 체력 감소 후 Branch로 Health <= 0 체크
  • 조건이 참이면 ShowGameEndScreen 같은 재사용 가능한 함수를 호출하도록 설계
  • 이 함수는 GameMode(BP_GameModeFirstFPS)에 만들어서, 승리/패배 두 경우 모두 같은 함수에 bool IsVictory 같은 파라미터만 다르게 넘겨 재사용하도록 계획
  • 함수 내부에서는 HUD 위젯의 결과 텍스트를 Set Text로 변경하고, 필요하면 Set Game Paused나 입력 모드 전환(Set Input Mode UI Only) 처리

 

 

3. 체력·데미지가 높은 보스몹 만들기

기존 BP_Ant를 부모로 하거나 별도 블루프린트로 보스몹을 제작했다.

  • 기본 몹 대비 Max Health, Damage Amount 변수 값을 대폭 상향
  • 보스 전용 비주얼(스켈레톤/후드 캐릭터 형태)과 공격 패턴을 다르게 구성
  • 남은 시간(남은 시간), 남은 적(남은 적) HUD 텍스트와 연동해서 보스가 스폰 조건(예: 남은 적 3마리 도달 시)에 맞춰 나타나도록 설계

일반 몹과 보스몹을 같은 부모 클래스에서 파생시키되, 변수 오버라이드로 스탯만 다르게 주는 방식이 상속 구조상 깔끔하다는 걸 다시 확인했다.

4. 보스 처치 후 포탈 → 상점 이동

보 플레이어가 포탈에 닿으면 상점 레벨로 이동하는 흐름을 만들었다.

  • 포탈 액터에는 Box Collision(오버랩 감지)을 붙이고 On Component Begin Overlap 이벤트 사용
  • 오버랩된 액터가 플레이어인지 Cast To BP_Character(혹은 태그 체크)로 검증
  • 조건 만족 시 Open Level or teleport 노드로 상점 레벨(Dungeon_Demo_00 등) 로드

레벨 전환 시 플레이어 상태(체력, 총알 수 등)를 유지하고 싶다면 Game Instance에 데이터를 저장해뒀다가 새 레벨에서 다시 불러오는 구조가 필요하다는 점도 정리했다.

 

 

 

5. 상점에서 무기 구매 UI (근접 시 "B: 구매하기" 표시)

상점 레벨에서 총 판매대 근처에 다가가면 구매 버튼 안내 텍스트가 뜨는 상호작용을 만들었다.

  • 무기 진열대 액터에 Sphere Collision(트리거 범위) 부착
  • On Component Begin Overlap → HUD/위젯 텍스트("B: 구매 하기") Visibility = Visible
  • On Component End Overlap → 다시 Hidden
  • 범위 안에 있을 때 B 키 입력(Input Action Buy)을 받으면 구매 로직(총알/골드 차감, 무기 지급) 실행

근접 상호작용 UI의 전형적인 패턴 — Overlap으로 안내 문구 토글 + 키 입력으로 실제 로직 실행 — 을 구매 시스템에도 그대로 적용할 수 있다는 걸 체감했다.

6. Persistent 레벨 구조 만들기

여러 레벨(동굴 던전, 상점 등)을 하나로 관리하기 위해 Persistent Level 구조를 세팅했다.

  • Levels 패널(Window → Levels)을 열어서 관리
  • 최상위에 Persistent Level을 두고, 그 아래로 서브레벨(Dungeon_Demo_00, LV_Soul_Cave)을 스트리밍 레벨로 추가
  • Levels 패널의 Levels → Add Existing... 또는 Add New 메뉴로 서브레벨을 등록
  • 각 서브레벨은 필요에 따라 Visible(항상 보임) / Hidden(로드는 되지만 안 보임) 상태로 토글 가능하고, 블루프린트에서 Load Stream Level, Unload Stream Level 노드로 런타임 중에도 제어 가능

이렇게 구조를 잡아두는 이유는, 하나의 거대한 맵에 모든 걸 욱여넣는 대신 던전 파트(전투)와 상점 파트를 물리적으로 분리된 서브레벨로 관리하면서도, 조명이나 공용 게임모드 같은 건 Persistent Level에 남겨서 공유할 수 있기 때문이다. 특히 앞서 만든 "보스 처치 → 포탈 → 상점 이동" 흐름과 맞물려서, 포탈에 닿았을 때 Open Level로 완전히 다른 맵을 로드하는 대신, 나중에는 Level Streaming으로 전환해서 로딩 화면 없이 매끄럽게 상점으로 넘어가는 것도 고려해볼 만하다는 생각이 들었다.

그리고 맵이 겹칠수가 있는데 레벨 오른쪽에 연필을 누르면 레벨의 위치를 옮기는것도 가능하다

Git 입문 자료 요약

Git이란?
파일 변경 사항을 저장(커밋)해두고 필요하면 예전 상태로 되돌릴 수 있게 해주는 버전 관리 프로그램. 게임의 세이브 포인트에 비유됨.

Git vs GitHub

  • Git: 내 컴퓨터에서 커밋(저장)을 만드는 프로그램
  • GitHub: 그 커밋 기록을 인터넷에 올려 공유·백업하는 사이트

핵심 개념 3단계
작업 디렉토리(파일 수정) → git add(스테이징, 장바구니) → git commit(저장소에 영구 저장)

기본 흐름

  1. git init — 폴더를 저장소로 초기화 (최초 1회)
  2. 파일 생성/수정
  3. git status — 현재 상태 확인
  4. git add 파일명 — 스테이징
  5. git commit -m "메시지" — 커밋
  6. git log --oneline — 커밋 기록 확인

GitHub 연동

  • git remote add origin [주소] — 원격 저장소 연결 (최초 1회)
  • git push -u origin main — 최초 업로드
  • 이후엔 git add → git commit → git push 반복

자주 쓰는 명령 4개: status, add, commit, push — 이것만 알아도 실무의 80% 커버

다음 학습 단계: 브랜치, 병합/충돌 해결, git restore/git revert로 되돌리기, Pull Request 협업