스택오봇(Stack O Bot)은 언리얼 엔진을 활용한 게임 개발을 살펴보기 위해 학습 리소스로 제작된 샘플 게임 프로젝트입니다. 스택오봇에서는 프로시저럴 콘텐츠 제너레이션(PCG), 블루프린트, 레벨 인스턴스 등 다양한 엔진 기능을 확인할 수 있습니다. 샘플 프로젝트에는 디자인 선택과 구현 디테일을 설명하는 게임 내 개발자 해설과 블루프린트 및 머티리얼에 대한 코멘트가 포함되어 있습니다.
스택오봇에서 플레이어는 삼인칭 시점으로 로봇 캐릭터를 조종하며 일련의 플랫폼 도전 과제와 피직스 기반 퍼즐을 완료해야 합니다. 스택오봇은 모바일 폰부터 하이엔드 PC까지 다양한 디바이스를 지원하며 키보드와 마우스, 컨트롤러, 터치스크린 입력으로 제어할 수 있습니다.
이 페이지에서는 스택오봇 샘플 프로젝트를 여는 방법을 설명하고, 프로젝트의 주요 기능에 대한 개요 및 추가 학습에 필요한 관련 문서 링크를 제공합니다.
스택오봇 프로젝트 열기
이 페이지에 설명된 스택오봇 샘플은 언리얼 엔진 5.6을 사용하여 빌드되었습니다. 이전 버전의 스택오봇 샘플을 사용해 보려면 5.6 이전의 엔진 버전용 프로젝트를 다운로드하세요.
스택오봇 샘플 프로젝트를 여는 절차는 다음과 같습니다.
Fab에서 Stack O Bot 샘플로 이동하여 내 라이브러리에 추가(Add to My Library)를 클릭합니다.
아니면 언리얼 엔진용 Fab 플러그인에서 샘플 프로젝트를 검색해도 됩니다.
스택오봇으로 이동하여 프로젝트 생성(Create Project)을 클릭합니다.
에픽게임즈 런처에서 언리얼 엔진 > 라이브러리(Library) > 팹 라이브러리(Fab Library)로 이동합니다.
프로젝트의 이름과 위치를 입력합니다.
엔진 버전으로 5.6을 선택합니다.
생성(Create)을 클릭합니다. 프로젝트가 열립니다.
샘플 콘텐츠 및 언리얼 엔진용 팹 플러그인 액세스에 대한 자세한 내용은 샘플 및 튜토리얼을 참조하세요.
권장 시스템 사양
스택오봇은 모바일 폰, PC 등 다양한 디바이스를 지원하도록 설계되었습니다. 콘텐츠는 디테일 레벨에 따라 확장할 수 있으며 모바일과 완벽하게 호환됩니다.
PC의 권장 시스템 사양은 다음과 같습니다.
Windows 10 64비트 버전 1909 리비전 .1350 이상 또는 버전 2004 및 20H2 리비전 .789 이상
Windows 11은 언리얼 엔진 5와 호환되며 권장 사양에 맞습니다.
Intel 또는 AMD 쿼드코어, 2.5GHz 이상
시스템 RAM 32GB
VRAM 8GB
DirectX 11 또는 12 호환 그래픽 카드
스택오봇 프로젝트 탐색하기
스택오봇 프로젝트를 열면 레벨 에디터에서 Lvl_Empty 맵이 기본적으로 열립니다. 이 맵은 이 샘플 프로젝트를 사용하기 위한 몇 가지 화면 정보를 제공합니다.
샘플 프로젝트의 콘텐츠는 대부분 /Content/StackOBot/ 폴더에 있습니다. 메인 게임 맵인 Lvl_StackOBot은 /Content/StackOBot/Maps 폴더에 있습니다.
게임을 플레이하려면 메인 툴바에서 플레이 아이콘을 클릭합니다.
게임은 Lvl_MainMenu 맵에 포함된 메인 메뉴로 시작합니다. PLAY를 클릭하여 메인 게임 맵인 Lvl_StackOBot으로 이동합니다.
메인 게임 맵에는 플레이어가 가까이 다가가면 개발자의 해설이 나오는 말풍선 아이콘이 있습니다. 이 해설에서는 개발자가 스택오봇을 만들 때 내린 몇 가지 구현 디테일과 디자인 결정을 설명합니다.
개발자 해설 말풍선의 콘텐츠는 /Content/DevCom 폴더에 있습니다.
스택오봇 게임 내 컨트롤
플레이어는 키보드와 마우스, 컨트롤러 또는 터치스크린 컨트롤을 사용하여 스택오봇을 플레이할 수 있습니다.
| 액션 | Keyboard and Mouse | Controller | 터치(아래 이미지 참조) |
|---|---|---|---|
Move | W, A, S, D | 왼쪽 썸스틱 | 1 |
보기 | Mouse | 오른쪽 썸스틱 | 2 |
Jump | 스페이스 바(누르기) | 전면 하단 버튼(누르기) | 3(누르기) |
제트팩 | 스페이스 바(길게 누르기) | 전면 하단 버튼(길게 누르기) | 3(길게 누르기) |
잡기 | E | 오른쪽 트리거 | 4 |
일시정지 | Escape 또는 왼쪽 Shift | 시작 버튼 | 5 |
스택오봇 기능
이 섹션에서는 스택오봇 샘플 프로젝트에 사용되는 기능과 프로젝트 폴더에 있는 관련 에셋의 위치를 설명합니다.
레벨 소개
스택오봇은 시퀀서를 사용하여 레벨 시퀀스로 빌드된 레벨 소개로 시작됩니다. 레벨 시퀀스에서는 세 대의 시네마틱 카메라와 카메라 컷 트랙을 사용하여 레벨에서 이동하고 게임 맵의 다양한 요소를 보여줍니다.
레벨 시퀀스(SQ_Lvl1_fly)는 /Content/StackOBot/Maps 폴더에 있습니다.
커스터마이징 가능 삼인칭 캐릭터
스택오봇 프로젝트에는 삼인칭 캐릭터가 포함되어 있는데, 이동하거나 점프하고 논플레이어 캐릭터(NPC)나 오브젝트와의 인터랙션이 가능합니다. 캐릭터의 블루프린트인 BP_Bot은 애니메이션 그래프, 컨트롤 릭, 커스터마이징할 수 있는 머티리얼로 구성되어 있습니다.
애니메이션 그래프는 서 있거나, 달리거나, 점프하는 등 다양한 캐릭터 스테이트를 애니메이팅하는 데 사용됩니다. 컨트롤 릭은 캐릭터의 발로 다른 표면을 밟거나 버튼을 누를 때 손을 버튼 위치로 안내하는 등 상황에 맞는 애니메이션에 사용됩니다. 커스터마이징할 수 있는 머티리얼에는 캐릭터의 컬러 조합과 표정을 변경할 수 있는 파라미터가 포함되어 있습니다.
BP_Bot 블루프린트는 /Content/StackOBot/Blueprints/Character 폴더에, 캐릭터 애니메이션과 머티리얼은 /Content/StackOBot/Characters/Bot 폴더에 있습니다.
프로시저럴 콘텐츠 제너레이션(PCG)
스택오봇의 맵은 프로시저럴 콘텐츠 제너레이션(PCG)을 사용하여 생성됩니다. PCG는 부유하는 섬, 폴리지, 플랫폼, 육각형 돔, 펜스, 코인 생성기 등 다양한 에셋을 만드는 데 사용됩니다.
플랫폼은 크기를 지정하고, 기존 타일 조각을 사용하며, 플랫폼의 시각적 일관성을 유지하기 위한 규칙을 적용하여 생성됩니다. 돔은 맵 곳곳에 배치되지만, 돔이 없는 레벨 입구와 출구를 설정할 수 있습니다.
PCG 시스템을 사용하여 펜스를 생성하며, 스플라인 PCG_BP_FenceSpline을 샘플링하고 규칙을 적용하여 기둥과 끝 캡 등 펜스의 각종 부분을 생성합니다. 이 맵에는 코인 생성기가 포함되어 있으며, 이 코인 생성기도 PCG를 이용하여 스플라인을 따라 코인을 스폰합니다.
PCG 콘텐츠는 /Content/StackOBot/Blueprints/PCG 폴더에 있습니다.
UV 없는 스마트 머티리얼
스택오봇 프로젝트는 UV 없는 스마트 머티리얼을 사용하여 떠 있는 플랫폼, 금속 실린더, 바이오 돔 구조물의 금속 부분과 같이 콘크리트, 금속, 페인팅된 표면이 있는 맵의 모든 메시에 고퀄리티 텍스처를 적용합니다. 개발팀은 메시의 섹션마다 UV 채널을 생성하지 않고, 모델링 툴을 사용하여 각 메시의 버텍스 컬러 정보를 추가했습니다. 그런 다음 스마트 머티리얼은 버텍스 컬러를 사용하여 각 메시에 텍스처를 배치합니다.
HLOD 생성
스택오봇의 맵은 렌더링할 에셋이 많고 규모가 크기 때문에 프로젝트는 언리얼 엔진의 하이라키컬 레벨 오브 디테일(Hierarchical Level of Detail, HLOD) 시스템을 사용하여 게임플레이 퍼포먼스를 개선합니다.
스테이트 트리 NPC 행동
스택오봇에는 플레이어 캐릭터와 인터랙션할 수 있는 NPC가 포함되어 있습니다. NPC는 맵 곳곳을 돌아다니며, 플레이어가 근처로 오면 쫓아가고, 부딪힌 플레이어를 밀쳐내고, 머리 위로 플레이어 캐릭터가 점프하면 파괴됩니다. NPC 행동은 유휴, 걷기, 사망 등 각 NPC가 취할 수 있는 다양한 스테이트와 각 스테이트에서 NPC가 수행해야 하는 액션을 정의하는 스테이트 트리를 사용하여 제어합니다.
NPC의 스테이트 트리는 /Content/StackOBot/AI/STree_Bug 폴더에 있습니다.
모듈형 레벨 인스턴스
스택오봇은 레벨 인스턴스를 사용하여 재사용할 수 있는 모듈형 레벨 세그먼트를 생성합니다. 예를 들어, 부유하는 섬이 베리언트로 있는 레벨 인스턴스가 있는데, 이 레벨 인스턴스를 사용하여 새로운 지역마다 고유한 콘텐츠를 생성하지 않고도 게임 맵을 빌드할 수 있습니다.
각 레벨 인스턴스는 독립형 맵으로 플레이할 수도 있고 월드 파티션 맵에 추가할 수도 있습니다. 각 인스턴스에는 트랜스폼이 있어 다른 맵에 배치할 때 회전하거나 위치를 조정할 수 있습니다.
오브젝트의 디테일 패널에서 메인 월드 전용(Main World Only)으로 태깅된 오브젝트를 인스턴스에 추가할 수 있습니다. 이러한 오브젝트는 인스턴스를 독립형 맵으로 플레이하는 경우에만 표시되며, 월드 파티션 맵에서 맵을 레벨 인스턴스로 사용하는 경우에는 표시되지 않습니다. 월드 파티션 맵에서 사용하지는 않지만 레벨 인스턴스를 독립형 맵으로 테스트하고 디버깅할 때 사용할 라이팅, 플레이어 시작 및 기타 오브젝트의 메인 월드 전용 체크박스를 체크합니다.
레벨 인스턴스는 /Content/StackOBot/Maps/LevelInstances 폴더에 있습니다. 메인 월드 전용으로 태깅된 오브젝트를 사용하는 레벨 인스턴스에는 이러한 오브젝트가 포함된 Main World 폴더가 있습니다.
피직스 기반 인터랙션
스택오봇은 언리얼 엔진의 피직스 시스템을 사용하여 피직스 오브젝트, 인터랙션, 파괴 기능을 구현합니다.
쌓을 수 있는 상자와 같은 피직스 오브젝트의 경우, 플레이어 캐릭터가 피직스 핸들을 사용하여 잡습니다. 바운스 패드와 팬 같은 오브젝트는 피직스 명령을 통해 플레이어를 공중으로 던집니다. 떠다니는 플랫폼과 다리는 피직스 컨스트레인트 구성을 사용합니다. 지붕과 리스폰 플랫폼과 같은 디스트럭터블 오브젝트는 카오스 마스터 필드가 트리거하는 미리 프랙처링된 지오메트리 컬렉션을 사용합니다.
이 피직스 오브젝트들은 /Content/StackOBot/Blueprints/PhysicsElements 폴더에 있습니다.
다이내믹 카메라
스택오봇은 커스텀 플레이어 카메라 매니저(BP_CamManager)를 사용하여 다음과 같은 세 가지 카메라 타입을 생성합니다.
플레이어의 뒤를 따라가는 삼인칭 카메라
게임 맵의 다양한 요소를 시네마틱한 각도로 보여주도록 고안된 고정된 형태의 삼인칭 시점
고전적인 2D 플랫폼 게임 스타일을 재현하도록 설계된 횡스크롤 구현
플레이어를 따라다니는 삼인칭 카메라는 거의 전체 메인 맵에서 사용됩니다. 움직이는 특정 플랫폼에 서 있으면 카메라가 고정된 삼인칭 시점으로 전환됩니다. 맵에서 카메라가 횡스크롤 시점으로 전환되는 곳이 한 곳 있습니다.
카메라 매니저는 블루프린트 액터(BP_GameCamVolume), 카메라 매니저의 로직, 매니저와 블루프린트 액터 사이의 통신을 위한 인터페이스(BPI_CamManager)를 사용하여 3가지 카메라 타입 간에 전환합니다.
카메라 매니저와 게임 카메라 볼륨 블루프린트는 /Content/StackOBot/Blueprints/Camera 폴더에 있습니다.
게임플레이 인터랙션
스택오봇에는 플레이어 캐릭터가 인터랙션할 수 있는 모든 액터에 추가되는 인터랙션 핸들러 컴포넌트가 포함되어 있습니다. 이는 버튼이나 압력 패드와 같은 오브젝트에 적용됩니다.
상자와 같이 잡을 수 있는 오브젝트에는 BP_Bot의 Grab_Check 함수에 의해 확인되는 GRAB 액터 탭이 있습니다. 잡은 오브젝트는 Grab_Update 함수에 의해 업데이트됩니다.
인터랙션 핸들러 컴포넌트는 /Content/StackOBot/Blueprints/GameElements 폴더에 있습니다. 잡기 로직은 /Content/StackOBot/Blueprints/Character 폴더에 있는 BP_Bot 블루프린트에 포함되어 있습니다.
목표 추적
스택오봇은 게임 모드를 사용하여 목표 시스템을 구현합니다. 인터랙션 핸들러 블루프린트 컴포넌트에서 IsObjective 부울을 사용하여 인터랙티브 액터에 태그를 지정할 수 있습니다. 플레이어가 태깅된 액터와 인터랙션하면 목표가 업데이트됩니다.
목표는 게임의 유저 인터페이스(UI)에서 추적됩니다. 인터랙션 핸들러는 오브젝트 상태를 UI에 보내고 필요에 따라 UI를 업데이트합니다.
또한, 목표는 목표당 하나의 라이트를 갖는 BP_Portal 액터에 의해 맵에서 시각적으로 표현됩니다. 목표가 완료되면 라이트가 켜집니다. 모든 목표가 완료되고 모든 라이트가 켜지면 포털이 활성화되고 트리거 콜리전이 활성화됩니다. 포털이 활성화되면 플레이어는 포털에 진입하여 맵을 완성할 수 있습니다. 인터랙션 핸들러 컴포넌트는 라이트와 포털의 로직을 관리합니다.
인터랙션 핸들러 컴포넌트(BPC_InteractionHandler)와 포털 블루프린트(BP_Portal)는 /Content/StackOBot/Blueprints/GameElements 폴더에 있습니다. 유저 인터페이스 에셋(HUD_InGame)은 /Content/StackOBot/Blueprints/Framework 폴더에 있습니다.