컨텐츠 검색
[UE5 BP] 훈련 시설 탈출: UE5 블루프린트로 구현한 6단계 미니게임

2025. 12. 3. 23:24Unreal Engine/개념

1. 프로젝트 목표

이번 프로젝트는 언리얼 엔진 5 블루프린트만을 활용해 단계별 미니 탈출 게임을 구현하는 것을 목표로 진행했다.
플레이어는 시설 내부의 여러 장애물을 통과하여 최종 탈출 지점까지 도달해야 한다.

전체 맵

2. 핵심 기능: Timeline 기반 상호작용 기믹 시스템

이 게임의 핵심은 Timeline을 이용해 움직이는 오브젝트를 자연스럽게 제어하는 상호작용 시스템이다.

문, 발판, 벽 등 다양한 오브젝트들이
Timeline + Lerp 조합을 통해 부드럽게 회전하고 이동하며,
각 단계의 퍼즐과 장애물에 자연스럽게 연결되도록 설계했다.

3. 구현 요소 및 주요 기술

3.1. 1단계: 회전문 자동 개방

Problem: 캐릭터가 접근하면 자연스럽게 회전하며 열리고, 지나가면 다시 닫히는 문 연출이 필요함

Flow: BP_RotatingDoor

1. BeginPlay:

  • 초기 회전값(StartRotation), 목표 회전값(TargetRotation) 변수 초기화

2. Trigger Overlap:

  • 캐릭터 판별 Cast

3. Timeline.Play:

  • Lerp(Rotator)로 Start→End 회전값을 부드럽게 보간하며 문 열기

4. Timeline.Reverse:

  • 캐릭터가 멀어지면 문을 자연스럽게 닫기


3.2. 2단계: 발판 이동

Problem: 플레이어가 탑승하면 부드럽게 이동하는 엘리베이터 구현

Flow: BP_Elevator

1. BeginPlay:

  • 시작 위치(StartLocation), 도착 위치(EndLocation) 초기화

2. 인스턴스 편집 변수:

  • MoveOffset: 발판 이동 방향/거리 (사선 이동 가능)
  • StartDuration: 동작 시작 지연 시간 조절

3. Delay 2초:

  • 탑승 시간 확보를 위한 딜레이

4. Timeline:

  • Lerp(Vector)로 위치를 자연스럽게 이동

5. FlipFlop:

  • Timeline.Play ↔ Timeline.Reverse 반복 실행 (왕복 이동)


3.3. 3단계: 버튼 위에 큐브를 올려 벽을 길로 만들기

Problem: 큐브가 버튼 위에 올라가면 버튼이 눌리는 애니메이션과 연결된 벽들이 변화해야 함

Flow: 버튼이 눌리는 동작 (BP_PushButton)

1. Trigger Overlap: 큐브 판별 Cast

2. Timeline: 버튼을 아래로 눌리는 애니메이션

3. Lerp(Vector): 버튼 위치 보간

4. ForEachLoop:

  • 연결된 모든 벽에 대해 OpenWall 함수 호출

Problem: 버튼이 눌리면 벽이 회전하여 새로운 길이 열려야 함

Flow: 벽을 회전시켜 길 만들기 (BP_RotatingWall)

1. OpenWall 이벤트:

  • 문이 닫혀 있을 경우 1초 후 시작
  • ClosedRotation, OpenRotation 초기화
  • Pitch(인스턴스 편집 가능): 회전각 커스터마이징 가능

2. Timeline:

  • Lerp(Vector) 또는 Lerp(Rotator)로 회전값 보간

3. 벽 회전 → 새로운 길 형성


3.4. 4단계: 폭탄을 피해 이동하기

Problem: 플레이어가 가까이 오면 로봇이 플레이어를 계속 바라보도록 해야 함

Flow: 로봇이 플레이어를 바라보도록 만들기 (BP_Enemy)

1. Trigger Overlap → Cast to Character

2. Tick:

  • Find Look at Rotation으로 매 프레임 회전각 계산
  • Lerp(Rotator)로 부드러운 회전

Problem: 일정 주기로 캐릭터를 향해 투사체를 발사

Flow: 3초마다 폭탄 발사 (BP_BallSpawner)

1. BeginPlay:

  • SetTimerByFunctionName으로 3초마다 SpawnBall 실행

2. SpawnBall 이벤트:

  • 캐릭터의 Z < 500 조건에서만 실행
  • SpawnActor로 폭탄 생성
  • (CharacterLocation - BallLocation) 방향으로 Add Impulse 적용하여 발사

Problem: 폭탄이 캐릭터에 닿으면 폭발 + 넉백 효과

Flow: 폭탄 피격 처리 (BP_RollingBall)

1. OnComponentHit → Cast to Character

2. Launch Character:

  • 특정 방향·세기로 캐릭터 넉백

3. Play Sound at Location: 폭발음

4. Destroy Actor: 폭탄 제거


3.5. 5단계: 흔들리는 발판 & 추락

Problem: 밟으면 흔들리고 이후 추락하는 위험 요소 구현

Flow: 흔들리는 발판 & 추락 (BP_FallingPlatform)

1. BeginPlay: 시작 위치·끝 위치 값 초기화

2. Trigger Overlap → Cast:

  • 캐릭터가 발판 위에 있으면 bBusy = true

3. Timeline(Shake):

  • 흔들리는 애니메이션

4. 상태 검사:

  • bBusy가 true이면 bIsFalling = true

5.Timeline(Fall):

  • Lerp(Vector)로 아래 방향으로 추락

6. Delay 후 복구:

  • 3초 뒤 원래 위치로 되돌림


3.6. 6단계: 목적지 도착

Problem: 플레이어가 도착하면 문이 아래로 열리고, 벗어나면 닫히는 구조

Flow: 목적지 도착 자동문 (BP_RollDoor)

1. BeginPlay: 위치 변수 초기화

2. Trigger Overlap → Cast:

3. Timeline: 문을 아래로 이동시키며 열기

4. Reverse: 플레이어가 나가면 다시 닫힘


4. 기술적으로 새롭게 배운 점

이번 프로젝트에서 특히 크게 배운 부분은
Timeline의 Play From Start, Reverse 기능,
그리고 FlipFlop 노드의 활용 방식이다.

✔ Play From Start

  • Timeline을 항상 처음 지점부터 정확하게 다시 재생할 수 있다.
  • 덕분에, 발판이 흔들리기 시작하는 타이밍을 안정적으로 제어할 수 있었다.
    (캐릭터가 올라오는 순간마다 동일한 동작을 반복해야 했기 때문)

✔ Reverse

  • Timeline을 거꾸로 재생할 수 있어
    추락한 발판을 자연스럽게 원래 위치로 되돌리는 흐름을 구현할 수 있었다.
  • 한 Timeline을 양방향으로 활용할 수 있어 구조가 간단해짐.

✔ FlipFlop

  • 입력이 들어올 때마다 A → B → A → B 순으로 실행을 번갈아 호출한다.
  • 이를 활용해 발판의 왕복 이동을 한 노드로 간단하게 반복 제어할 수 있었다.

✔ FlipFlop을 사용한 이유

FlipFlop은 Timeline을 Play와 Reverse로 번갈아 재생해야 하는 구조를
조건문이나 별도 변수 없이 가장 직관적으로 구현할 수 있는 방식이었다.

즉,

  • “왕복 이동”이라는 반복 패턴
  • “Play ↔ Reverse” 전환을 자동 처리
  • 추가 로직 최소화

이 세 가지를 동시에 만족시키는 최적의 노드였다.


5. 소감

이번 프로젝트를 통해
블루프린트의 Timeline 제어 능력,
그리고 상호작용 기믹을 설계하는 구조적 사고 능력을 크게 향상시킬 수 있었다.

특히, 오브젝트의 상태 변화를 Timeline 하나로 관리하면서
Play From Start / Reverse / FlipFlop을 어떻게 조합하느냐에 따라
동작의 자연스러움이 완전히 달라진다는 점을 체감할 수 있었다.