사전캠프 TIL

26.04.16 미니 프로젝트: 장애물 피하기 게임 만들기

jh009 2026. 4. 16. 18:01

목표

좌우로 이동하면서 장애물을 피하고, 끝까지 가면 클리어되는 게임을 만든다.

1. 플레이어 자유 이동 (상하좌우)

2.바닥 + 벽으로 맵 구성

3. 장애물(큐브) 좌우 이동 (속도 각각 다르게)

4. 장애물 충돌 시 게임오버 UI + 다시하기

5. 골 도달 시 클리어 UI + 다시하기

6. 게임 시작 시 플레이어 정상 스폰

 

※ 본 실습은 C++ 코딩 없이 진행됩니다.

※ 모든 기능은 블루프린트로 구현하며, 코드를 작성하지 않아도 됩니다.

※ 언리얼 기본 기능만으로 게임을 완성하는 것이 목표입니다.


장애물 만들기

1. 장애물 Blueprint 만들기

콘텐츠 드로어 → 블루프린트 클래스 → 액터 BP_Obstacle 생성

2. 움직임 컴포넌트 추가

컴포넌트 →  장애물이 될 Cube 생성 →  InterpToMovement 추가

3. 이동 경로 설정

Details 패널에서 설정

  • Control Points 추가 (2개 이상)
  • 시작 위치와 이동할 위치 설정

Point 0: 시작 위치

Point 1: 오른쪽 이동 위치

4. 반복 이동 설정

  • Duration → 이동 속도 조절 (값 작을수록 빠름)
  • Behaviour Type → Ping Pong (왕복 이동)

5. 맵에 배치

  • BP_Obstacle을 여러 개 배치
  • 각각 Control Points 위치를 다르게 설정

장애물 닿으면 게임오버

 6. 충돌 설정

BP_Obstacle → 컴포넌트 → Cube

 

Details 패널 설정

  • Collision Presets → OverlapAllDynamic
  • Generate Overlap Events → 체크

 

7. 이벤트 만들기, 플레이어 입력 막기

  • OnComponentBeginOverlap → Print "Game Over"
  • Get Player Controller → Set Input Mode UI Only → Show Mouse Cursor 체크
  • Cast To BP_ThirdPersonCharacter → 큐브끼리 충돌해도 GameOver 가 떠서 따로 추가하였음

 

게임오버 UI 만들기

8. UI 생성

  • Content Browser 우클릭
  • User Interface → Widget Blueprint
  • WBP_GameOver 생성

9. UI 구성

  • Text: "Game Over"
  • Button: "Retry"

[캔버스 패널] 안에 텍스트와 버튼을 넣어야 작동함

10. 다시하기 기능

버튼 클릭 이벤트

OnClicked → Open Level (현재 맵 이름)

 

게임오버 시 UI 띄우기

Create Widget (WBP_GameOver) → Add to Viewport

 

Get Player Controller / Set Input Mode Game Only

Retry 버튼을 눌렀을 때 움직이지 않는 상황이 생겨 따로 추가하였음

골 만들기

골 Blueprint 만들기  →  콘텐츠 드로어 → 블루프린트 클래스 → 액터 BP_Goal 생성

11. 클리어 처리

GameOver  동일 구조

 

OnComponentBeginOverlap → Create Widget (Clear UI) → Add to Viewport → Disable Input

12. 플레이어 스폰

  • 맵에 PlayerStart 있으면 거기서 시작
  • 없으면 자동 위치 생성됨

13. 테스트

1) Play 클릭

2) 캐릭터 이동

3) 장애물 피하기

4) 닿으면 게임오버

5) 골 도달하면 클리어

6) 다시하기 버튼 눌러 재시작

 

느낀 점

  • 이제는 컴포넌트 추가, Details 패널는 어느정도 익숙해졌지만, 블루프린트는 아직 많이 어색하고 연습이 필요하다.
  • 위젯 블루프린트를 처음 써봤는데 쉬우면서도 어려운 느낌이 들어 이것도 익숙해질때까지 연습이 필요해보인다.
  • 장애물 만들기 재밌다.