개요
오늘은 선배 기수가 만든 게임 AVaOut을 플레이하며 게임을 단순히 즐기는 것이 아니라 개발자의 관점으로 분석하는 연습을 진행했다. AVaOut은 4인 협동 3인칭 어드벤처 게임이다. 플레이어는 각 지역을 탐험하며 연료와 단서를 수집하고, 출발 조건을 만족하여 다음 지역으로 이동한다. 연료를 목표 수치 이상 모으고, 맵에 존재하는 단서를 모두 수집하면 열차를 통해 다음 지역으로 진행할 수 있다.



게임을 플레이하면서 분석할 때는 다음과 같은 관점으로 접근했다.
- 플레이어는 어떤 목표를 수행하는가?
- 어떤 시스템이 반복적으로 사용되는가?
- 기능은 어떤 흐름으로 동작하는가?
- 어떤 변수들이 상태를 저장하는가?
- 어떤 부분을 함수로 분리할 수 있는가?
또한 실제 게임 기능을 블루프린트 흐름으로 표현하면서 이벤트 → 처리 → 결과의 구조로 생각하는 연습을 했다.
게임 분석
① 블루프린트 흐름 설계
기능을 구현할 때는 이벤트 발생 후 어떤 순서로 동작하는지 흐름을 설계해야 한다. 아이템 획득 기능을 보고 설계해봤다.
흐름
오버랩 이벤트 발생
→ “F 키로 획득” UI 표시
→ F 키 입력
→ 인벤토리의 빈 슬롯 유무 확인(Branch)
(True인 경우)
→ 빈 슬롯에 아이템 저장
→ 맵의 아이템 오브젝트 제거(Destroy Actor)
→ 인벤토리 UI 갱신
(False인 경우)
→ 현재 선택된 슬롯의 아이템 정보 제거
→ 맵에 현재 선택된 슬롯의 아이템 생성
→ 현재 선택된 슬롯에 아이템 저장
→ 맵의 아이템 오브젝트 제거(Destroy Actor)
→ 인벤토리 UI 갱신
특히 Branch를 사용하여 인벤토리에 빈 슬롯이 있는지 확인하는 과정이 중요하다는 것을 알 수 있었다.
② 변수 설계
기능을 구현하기 위해서는 현재 상태를 저장할 변수가 필요하다. 위 블루프린트에 꼭 필요한 ItemCount 변수를 설계했다.
- ItemCount (Integer)
- 현재 인벤토리에 저장된 아이템 개수 저장
③ 함수 설계
반복되거나 하나의 의미 있는 동작은 함수로 분리할 수 있다. 아이템을 획득하여 인벤토리에 저장하는 과정을 함수로 묶어 보았다.
- 함수명 : AddItemToInventory
- 입력값 : 아이템 정보
- 출력값 : 저장 성공 여부(True / False)
후기
이전에 선배 기수가 만든 게임을 플레이하며 분석한 적이 있었지만, 저번에는 게임의 전체적인 시스템과 플레이 경험 위주로만 살펴보았다. 하지만 이번에는 Overlap, Branch, Get/Set, Collision 등의 개념을 학습한 후 다시 기능을 분석해보면서 같은 시스템도 다르게 보였다. 특히 아이템 획득 기능을 보면서 단순히 "아이템을 줍는다"가 아니라, 오버랩으로 상호작용 가능 상태를 확인하고, Branch로 인벤토리 상태를 검사한 뒤, 변수 값을 변경하고 UI를 갱신하는 흐름으로 생각해볼 수 있었다. 이번 퀘스트를 통해 게임의 기능을 플레이어의 입장이 아닌 개발자의 입장에서 바라보는 연습을 할 수 있었고, 지금까지 배운 블루프린트 개념들이 실제 게임 기능에 어떻게 활용될 수 있는지 연결해서 생각해볼 수 있었다.
'언리얼 엔진 > TIL' 카테고리의 다른 글
| TIL - 베이스캠프 10일차 (0) | 2026.06.19 |
|---|---|
| TIL - 베이스캠프 9일차 (0) | 2026.06.18 |
| TIL - 베이스캠프 7일차 (0) | 2026.06.16 |
| TIL - 베이스 캠프 5일차 (0) | 2026.06.12 |
| TIL - 베이스캠프 4일차 (0) | 2026.06.11 |