지금까지 이 튜토리얼 시리즈에서 레벨 디자인과 게임 메커니즘을 사용해 플레이어를 위한 게임플레이를 엔지니어링했습니다. 이 과정에서 만든 퍼즐, 열쇠, 문 모두 게임플레이 루프를 이룹니다.
게임플레이 루프는 플레이어가 반복하는 일련의 액션으로, 게임플레이의 핵심적인 부분을 구성합니다.
이제는 만든 레벨의 루프를 닫아야 합니다. 이번 튜토리얼에서는 플레이어가 현재 레벨을 완료했음을 알리는 승리 화면을 만들어 보고, 승리 조건을 확인하고 플레이어를 다음 레벨로 안내하는 레벨 전환 지점도 만들어 봅니다.
레벨을 완성하면 이 트랙에서 배운 모든 내용을 확장해 적용할 수 있는 방법을 살펴봅니다.
승리 조건은 플레이어가 게임플레이 작업, 퀘스트, 레벨 또는 게임을 완료하기 위해 충족해야 하는 목표입니다. 게임 루프는 승리 조건을 충족할 수 있는 수단을 제공해야 합니다. 비선형 게임에서는 승리 조건이 두 개 이상 있을 수 있습니다.
시작하기 전에
이번 튜토리얼에서는 사용자가 퍼즐 어드벤처 디자인의 이전 섹션에서 다룬 다음 주제를 이미 이해하고 있다고 가정합니다.
위젯 블루프린트
블루프린트
변수
콜리전 볼륨
에디터에서 플레이 모드
부모 및 자손 에셋
함정 및 대미지의 다음 에셋이 필요합니다.
WBP_EliutedScreen위젯 블루프린트BP_Key블루프린트 클래스Enum_KeyType열거형
레벨 종료 부분 만들기
레벨의 핵심 게임플레이는 완성했지만, 여기에 전환 지점을 추가하면 플레이어가 흥미로운 방식으로 레벨을 마무리할 수 있게 됩니다. 여기에서는 플레이어를 높이 있는 플랫폼으로 띄우는 점프 패드를 만들어 봅니다. 나중에 이 플랫폼에 레벨 전환 지점을 배치하게 됩니다.
플랫폼 만들기
방 하나에 높은 플랫폼을 만들려면 LevelPrototyping > Meshes 폴더에서 SM_Cube 및 SM_Cylinder 스태틱 메시를 사용해야 합니다.
튜토리얼 샘플 레벨은 다음과 같은 네 개의 기둥이 있는 3.5m 정사각형 플랫폼을 사용합니다.
이러한 윤곽작업 조각을 레벨에 복사하려면 아래 스니펫을 복사하세요. 지금까지 샘플 레벨을 따라서 작업해 왔으면 Room 3의 뒤쪽 구석 근처에 이러한 셰이프가 나타나 있으므로, 이를 원하는 대로 움직일 수 있습니다.
플랫폼을 복사하려면 다음 단계를 따릅니다.
전체 스니펫 복사(Copy Full Snippet)를 클릭합니다.
Command LineBegin Map Begin Level Begin Actor Class=/Script/Engine.StaticMeshActor Name=StaticMeshActor_785 Archetype="/Script/Engine.StaticMeshActor'/Script/Engine.Default__StaticMeshActor'" ExportPath="/Script/Engine.StaticMeshActor'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.StaticMeshActor_785'" Begin Object Class=/Script/Engine.StaticMeshComponent Name="StaticMeshComponent0" Archetype="/Script/Engine.StaticMeshComponent'/Script/Engine.Default__StaticMeshActor:StaticMeshComponent0'" ExportPath="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.StaticMeshActor_785.StaticMeshComponent0'" End Object Begin Object Name="StaticMeshComponent0" ExportPath="/Script/Engine.StaticMeshComponent'/Game/AdventureGame/Designer/Lvl_Adventure.Lvl_Adventure:PersistentLevel.StaticMeshActor_785.StaticMeshComponent0'" StaticMesh="/Script/Engine.StaticMesh'/Game/LevelPrototyping/Meshes/SM_Cylinder.SM_Cylinder'" StaticMeshImportVersion=1 bUseDefaultCollision=False StaticMeshDerivedDataKey="STATICMESH_FD1BFC73B5510AD60DFC65F62C1E933E_228332BAE0224DD294E232B87D83948FQuadricMeshReduction_V2$2e1_6D3AF6A2$2d5FD0$2d469B$2dB0D8$2dB6D9979EE5D2_CONSTRAINED0_100100000000000000000000000100000000000080FFFFFFFFFFFFFFFFFFFFFFFF000000000000803F00000000000000803F0000803F00000000000000003D19FC1626C9B2485E57DB4B8EC731318B8215AE8D46FAD400000000010000000100000000000000010000000100000000000000000000000100000001000000400000000000000001000000000000000000F03F000000000000F03F000000000000F03F0000803F00000000050000004E6F6E65000C00000030000000803FFFFFFFFF0000803FFFFFFFFF0000000000000041000000000000A0420303030000000000000000_RT00_0"언리얼 에디터에서 뷰포트 또는 아웃라이너가 현재 활성 패널인지 확인하고 Ctrl + V를 누릅니다.
다음으로 플레이어를 플랫폼 위로 띄우는 점프 패드를 추가해야 합니다.
점프 패드 사용하기
점프 패드를 처음부터 만들 수는 있지만 그러면 시간이 많이 걸립니다. 보통 시간이 제한된 개발 환경에서는 직접 에셋을 만드는 대신, 미리 제작된(프리팹) 에셋을 임포트하는 것이 유용할 수 있습니다. 게임의 비주얼 스타일에 맞는 프리팹을 선택하면 일관된 스타일을 지키면서도 개발 속도를 높일 수 있습니다.
이 튜토리얼에서는 1인칭 템플릿에 포함된 에셋인 BP_JumpPad를 사용합니다.
BP_JumpPad를 통합하려면 다음 단계를 따릅니다.
콘텐츠 브라우저(Content Browser) 에서 LevelPrototyping > Interactable > JumpPad로 이동합니다.
BP_JumpPad의 인스턴스를 레벨에서 플랫폼 앞으로 드래그합니다. 이 튜토리얼에 나와 있는 위치에 정확한 일치시키려면BP_JumpPad의 위치를1790,-1460,10으로 설정합니다.
그러면 레벨은 다음과 같은 모습이 됩니다.
이제 작업을 테스트해야 합니다. 먼저 모든 BP_Enemy의 최대 속도가 0인지 확인합니다. 그래야 테스트 중에 움직이는 적을 상대하지 않게 됩니다.
뷰포트에서 우클릭하고 여기에서 플레이(Play From Here)를 선택해 현재 위치에서 레벨을 플레이테스트합니다. 점프 패드를 밟고 플랫폼에 도달하기를 시도합니다.
그러면 점프 패드의 부스트가 적용되어도 플레이어 캐릭터가 플랫폼에 도달할 수 없는 것을 알 수 있습니다. 이 문제는 점프 패드의 속도(Velocity) 파라미터를 조정하여 해결할 수 있습니다.
블루프린트에서 생성한 여러 편집 가능 변수와 마찬가지로, 속도 파라미터도 점프 패드 에셋을 위해 사전 제작된 인스턴스 편집 가능 변수입니다.
속도를 조정하려면 다음 단계를 따릅니다.
뷰포트에서
BP_JumpPad를 선택합니다.디테일(Details) 패널에서 속도(Velocity)(Z)를
1000으로 설정합니다.
이제 레벨을 다시 테스트해 보면 플랫폼으로 점프할 수 있습니다.
이제 플레이어가 레벨을 완료하면 표시되는 승리 화면을 만들어 보겠습니다.
승리 화면 만들기
위젯 블루프린트를 사용하여 트랩 및 대미지에서 만든 WBP_EliminatingScreen 게임 오버 화면과 비슷한 승리 화면을 만들 것입니다. 두 화면이 서로 매우 비슷하므로 WBP_EliminatingScreen을 출발점으로 활용합니다.
게임 오버 화면을 복제하여 승리 화면을 만들려면 다음 단계를 따릅니다.
콘텐츠 브라우저에서 AdventureGame > Designer > Blueprints > Widgets으로 이동합니다.
WBP_EliminatedScreen을 우클릭하고 복제(Duplicate)를 클릭합니다.새 위젯 블루프린트를
WBP_WinScreen으로 명명하고 더블클릭하여 위젯 에디터에서 엽니다. 그러면 Widgets 폴더가 다음과 같이 표시됩니다.메시지를 변경하려면 계층구조에서 텍스트(Text) 위젯을 클릭합니다.
디테일 패널의 콘텐츠(Content) 헤딩에서 텍스트 옆 텍스트 필드에
레벨 완료! …다음 레벨 로드 중을 입력합니다.외형(Appearance) 헤딩에서 컬러 및 오파시티(Color and Opacity) 옆의 색상 견본을 클릭하여 색 선택 툴을 엽니다. 원하는 색을 선택하거나, 튜토리얼을 따라 하려면 Hex sRGB 값을
FFE000FF로 설정합니다.승리 화면 텍스트가 더 짧으므로 화면을 더 채울 수 있도록 텍스트 크기를 높일 수 있습니다. 폰트(Font) 헤딩에서 크기(Size)를
72또는 가장 읽기 편한 크기로 변경합니다.저장(Save) 및 컴파일(Compile)한 후 위젯 에디터를 닫습니다.
다음으로 레벨 전환 지점을 만들어야 합니다.
레벨 전환 만들기
레벨 전환은 다음 레벨을 로드해 줍니다. 다양한 방식으로 레벨 전환을 트리거할 수 있는데, 플레이어가 컷씬을 완료하거나 픽업 아이템을 수집하거나 레벨 끝에 도달할 때 트리거할 수 있습니다.
이 튜토리얼의 레벨 전환은 다음 두 가지 상황이 발생할 때 트리거되는 블루프린트입니다.
플레이어가 레벨 전환 지점을 오버랩합니다.
승리 조건이 충족됩니다.
새 블루프린트를 생성하려면 다음 단계를 따릅니다.
콘텐츠 브라우저에서 AdventureGame > Designer > Blueprints로 이동합니다.
우클릭하고 새 폴더(New Folder)를 선택합니다. 이 폴더를
LevelTransition으로 명명합니다.LevelTransition 폴더에서 우클릭하고 블루프린트 클래스(Blueprint Class)를 선택하여 새 블루프린트를 생성합니다.
액터(Actor)를 부모 클래스로 선택합니다.
새 블루프린트를
BP_LevelTransition으로 명명하고 더블클릭하여 블루프린트 에디터에서 엽니다.
다음과 같이 레벨 전환 폴더에 새 블루프린트가 나타납니다.
지금까지 생성한 다른 블루프린트와 마찬가지로 레벨 전환에도 다음이 필요합니다.
플레이어가 런타임 중에 볼 수 있는 스태틱 메시
플레이어가 충돌할 때 탐지할 콜리전 셰이프
상호작용을 가능하게 해 주는 로직
먼저 메시와 박스 콜리전을 빌드한 다음 로직으로 넘어가겠습니다.
스태틱 메시 및 콜리전 셰이프를 생성하려면 다음 단계를 따릅니다.
BP_LevelTransition의 컴포넌트 탭에서 추가(Add) 버튼을 클릭하고cube를 찾아 새 스태틱 메시를 생성합니다.이 스태틱 메시를
TransitionPoint로 명명합니다.TransitionPoint를 선택한 상태에서 디테일 패널의 스케일(Scale)을
3.0,3.0,0.1로 설정합니다. 그러면 샘플 레벨의 최종 플랫폼에 맞게 크기가 조정됩니다. 원하는 경우 레벨에서 가장 적합한 크기로 조정할 수도 있습니다.컴포넌트 탭으로 돌아가 DefaultSceneRoot를 선택합니다. 추가 버튼을 클릭하고
box collision을 찾아 콜리전 셰이프를 생성합니다.박스 콜리전을
LevelTrigger로 명명합니다.LevelTrigger를 선택한 상태에서 디테일 패널의 스케일을
4.0,4.0,2.0으로 설정합니다. Z 위치를55.0으로 설정합니다.박스 콜리전이 올바른 셰이프로 표시되지 않으면 해당 콜리전이 TransitionPoint의 자손으로 설정되지 않도록 해야 합니다.
저장 및 컴파일합니다.
로직 만들기
BP_LevelTransition은 다음과 같은 다섯 가지 작업을 순서대로 수행해야 합니다.
오버랩을 확인합니다.
승리 조건을 확인합니다.
플레이어 입력을 비활성화합니다.
승리 화면을 표시합니다.
다음 레벨을 로드합니다.
이러한 상호작용을 지원하는 로직을 단계별로 생성해 보겠습니다.
오버랩 확인하기
오버랩을 확인하는 로직을 만들려면 다음 단계를 따릅니다.
BP_LevelTransition의 내 블루프린트(MyBlueprint) 탭에서 변수(Variables) 섹션의 + 버튼을 클릭하여 새 변수를 생성하고OtherActor로 명명합니다.핀 타입을 액터(Actor)(오브젝트 레퍼런스)로 설정합니다.
이벤트 그래프에서 기존 이벤트 노드 3개를 삭제합니다. 이러한 노드는 이제 필요하지 않습니다.
컴포넌트 탭에서 LevelTrigger를 우클릭하고 이벤트 추가(Add Event) > OnComponentBeginOverlap 추가(Add OnComponentBeginOverlap)를 클릭합니다. 이 함수는 오브젝트가 콜리전 셰이프와 오버랩되는지 확인합니다.
Exec 핀을 드래그해 Set Other Actor를 생성합니다.
두 Other Actor 핀을 서로 연결합니다.
다음으로 승리 조건을 확인하는 로직을 만듭니다.
승리 조건 확인하기
이 튜토리얼에서 승리 조건은 세 개의 키를 모두 수집하는 것입니다. 이러한 특정 조건을 선택한 이유는 게임 경험을 망치는 플레이어 액션을 예상해 이를 방지하기 위해서입니다.
예를 들어 승리 조건이 '플레이어가 레벨 전환 구역과 오버랩될 때'인데 플레이어가 방 벽을 넘어갈 방법을 찾으면 전체 레벨을 우회할 수 있게 됩니다. 키를 승리 조건으로 사용하면 플레이어가 벽과 문을 통과하는 길을 찾았더라도 게임 루프를 완료해야 합니다.
모든 버그를 예상하는 것은 불가능하지만, 예상 가능한 버그를 미리 고려해 디자인하면 플레이어가 게임을 우회하지 못하도록 할 수 있습니다.
키 데이터를 저장할 배열을 생성하려면 다음 단계를 따릅니다.
BP_LevelTransition의 내 블루프린트 탭에서 + 버튼을 클릭하여 새 변수를 생성하고HeldKeys로 명명합니다.핀 타입을 열거형 키 타입(Enum Key Type)으로, 컨테이너 타입을 배열(Array)로 설정합니다.
Set 노드의 Exec 핀을 드래그해 fnBPIGetKeys를 생성합니다.
타깃(Target) 핀을 드래그해 Get Other Actor를 생성합니다.
fnBPIGetKeys의 Exec 핀을 드래그해 Set Held Keys를 생성합니다.
두 Held Keys 배열 핀을 서로 연결합니다.
승리 조건을 설정하는 열거형 키 타입을 생성하려면 다음 단계를 따릅니다.
새 변수를 생성하고
RequiredKeys로 명명합니다. 이렇게 생성한 변수가 승리 조건이 됩니다.핀 타입이 열거형 키 타입이고 컨테이너 타입이 배열이어야 합니다.
디테일 패널에서 인스턴스 편집 가능(Instance Editable)을 활성화하고 카테고리(Category)를
구성(Setup)으로 설정합니다.블루프린트를 컴파일하여 디폴트 값에 대한 액세스 권한을 얻습니다. + 버튼을 클릭하여 배열에 세 개의 새로운 엘리먼트를 추가합니다.
인덱스 드롭다운 메뉴를 클릭하고 인덱스를 노란색(Yellow), 파란색(Blue), 빨간색(Red)으로 설정합니다.
이제 조건 충족 여부를 확인할 부울을 생성해야 합니다. For Each Loop with Break는 HeldKeys 배열을 순환하면서 각 키를 확인하고, 없는 키가 있으면 순환을 중단합니다.
없는 키를 확인하는 로직을 만들려면 다음 단계를 따릅니다.
새 변수를 생성하고
FoundAllKeys로 명명합니다.핀 타입을 부울(Boolean)로, 컨테이너 타입을 단일(Single)로 설정합니다.
SetHeldKeys의 Exec 핀을 드래그해 For Each Loop with Break를 생성합니다.
For Each Loop의 Array 핀을 드래그해 Get Required Keys 노드를 생성합니다.
Loop Body 핀을 드래그해 Branch를 생성합니다.
Condition 핀을 드래그해 Contains Item (Array) 노드를 생성합니다.
Contains 노드의 Target Array 핀을 드래그해 Get Held Keys를 생성합니다.
Condition 노드의 Item to Find 핀을 루프 노드의 Array Element 핀에 연결합니다.
Branch 노드의 True 핀을 드래그해 Set Found All Keys를 생성합니다. FoundAllKeys 옆의 체크 박스를 클릭하여 true로 설정합니다.
Branch 노드의 False 핀을 드래그해 Set Found All Keys를 생성합니다. 체크 박스를 비워 두고 Exec 핀을 For Each Loop의 Break 핀에 연결합니다.
앞서 본 작업 순서 중 이제 다음 세 단계를 더 만들어야 합니다. 그러기 위해서는 플레이어가 키를 모두 가지고 있어야 합니다.
플레이어 입력을 비활성화합니다.
승리 화면을 표시합니다.
다음 레벨을 로드합니다.
FoundAllKeys 결과를 사용하여 로직 시퀀스를 시작하려면 다음 단계를 따릅니다.
For Each Loop의 Completed 핀을 드래그해 Branch를 생성합니다.
Condition 핀을 드래그해 Get FoundAllKeys를 생성합니다.
Branch 노드의 True 핀을 드래그해 Sequence 노드를 생성합니다.
이 시퀀스에서 세 개의 액션을 빌드해야 하므로 핀 추가(Add Pin) 버튼을 클릭합니다.
이제 순서의 다음 단계인 플레이어 입력 비활성화로 넘어가겠습니다.
플레이어 입력 비활성화하기
승리 화면을 표시하는 동안 플레이어 입력을 비활성화해야 플레이어가 돌아다니면서 원하지 않는 대미지를 받지 않도록 할 수 있습니다.
플레이어 입력을 비활성화하려면 다음 단계를 따릅니다.
Sequence의 Then 0 핀을 드래그해 Disable Input 노드를 생성합니다.
Disable Input 노드의 Target 핀에서 Get Other Actor를 생성합니다.
Player Controller 핀을 드래그해 Get Player Controller 노드를 생성합니다.
다음으로 승리 화면을 표시하는 로직을 만들어 보겠습니다.
승리 화면 표시하기
WBP_Winscreen 위젯을 표시하려면 다음 단계를 따릅니다.
Sequence 노드의 Then 1 핀을 드래그해 Create Widget 노드를 생성합니다.
Class를 WBP_WinScreen으로 설정합니다.
Create Widget 노드의 Exec 노드에서 드래그해 Add to Viewport 노드를 생성합니다.
Create Widget의 Return Value 핀을 Add to Viewport의 Target 노드에 연결합니다.
이 로직에 문제가 있나요? 일단은 문제를 해결하지 않고 마지막 단계를 계속 진행하세요. 나중에 레벨을 플레이테스트하면서 문제를 찾은 다음 해결책을 만들면 됩니다.
다음 레벨 로드하기
이 튜토리얼에서는 현재 레벨을 다음 레벨의 자리표시자로 사용합니다. 자신의 게임을 디자인할 때 전환 지점을 통해 플레이어를 새 레벨로 안내해야 합니다.
현재 레벨을 로드하는 로직을 만들려면 다음 단계를 따릅니다.
Sequence 노드의 Then 2 핀을 드래그해 Open Level (by Object Reference) 노드를 생성합니다.
Open Level의 Level 핀을 드래그해 변수로 승격(Promote to Variable)을 찾습니다. 그러면 강제로 월드(World) 타입 변수가 생성됩니다.
내 블루프린트 탭을 통해 이 변수를 생성할 수도 있지만, 월드 핀 타입을 찾기 어려울 수 있습니다.
월드 변수를 선택한 상태로 디테일 패널에서 변수 이름을
NextLevel로 변경합니다.이를 구성 카테고리에 추가하고 인스턴스 편집 가능을 활성화합니다.
블루프린트를 컴파일하여 변수의 디폴트 값에 액세스하고 이를 로드하려는 레벨로 설정합니다. 이 튜토리얼을 따라 하려는 경우
Lvl_Adventure로 설정하면 현재 레벨을 루프하게 됩니다.저장 및 컴파일합니다.
이제 작업을 테스트해야 합니다. BP_LevelTransition의 인스턴스를 높이 있는 플랫폼으로 드래그합니다. 그런 키를 쉽게 획득할 수 있게 해 승리 조건을 충족하도록 합니다. 키 만들기에서 만든 노란색, 파란색, 빨간색 키의 인스턴스를 같은 방에 배치하면 쉽게 획득할 수 있습니다.
그러면 레벨이 다음과 같은 모습이 됩니다.
뷰포트에서 우클릭하고 여기에서 플레이(Play From Here)를 선택해 현재 위치에서 레벨을 플레이테스트합니다. 플랫폼으로 점프하여 레벨 전환을 활성화하면, 화면이 멈추고 플레이어가 승리 화면 메시지를 읽을 시간 없이 다음 레벨이 열리는 것을 볼 수 있습니다.
이 문제는 다음 섹션에서 해결합니다.
딜레이 만들기
이 튜토리얼에서는 Open Level을 사용하여 현재 레벨을 닫고 다음 레벨을 새 게임 인스턴스로 엽니다. 로딩 중에 Open Level은 게임을 멈추게 만듭니다. 플레이어의 시스템에 따라 멈춘 시간이 너무 짧거나(승리 화면을 읽을 수 없음), 아니면 너무 길어질 수 있습니다(게임에서 크래시가 발생한 느낌을 줌).
많은 게임들, 레벨 스트리밍을 사용하는 게임에서도 로딩 화면을 사용해 플레이어에게 게임이 제대로 작동하며 플레이어가 기다려야 한다는 것을 알립니다. 길거나 잦거나 지루한 대기 시간으로 인해 몰입감이 떨어지고 실망감을 줄 수 있다는 또 다른 문제도 로딩 화면으로 해결할 수 있습니다. 보통 로딩 화면에는 팁, 애니메이션 또는 오디오가 포함되어 플레이하지 않는 동안 플레이어의 주의를 끌 수 있기 때문입니다.
디자인 관련 기술 문제를 해결하기 위해 의도된 딜레이를 생성하면 다음을 기대할 수 있습니다.
모든 플레이어의 로딩 시간을 균등하게 만듭니다.
플레이어가 승리 화면을 읽기에 충분한 시간을 확보합니다.
플레이어가 볼 수 있는 무언가를 제공하여 로딩 시간의 지루함을 숨깁니다.
딜레이를 삽입하려면 다음 단계를 따릅니다.
BP_LevelTransition을 엽니다. 내 블루프린트 탭에서 +를 클릭하여 새 변수를 추가하고LevelLoadDelay로 명명합니다.핀 타입을 플로트(Float)로 설정합니다.
디테일 패널에서 '인스턴스 편집 가능'을 활성화하고 카테고리를 '구성'으로 설정합니다.
블루프린트를 컴파일하여 디폴트 값에 대한 액세스 권한을 얻습니다. 레벨 로드 딜레이(Level Load Delay)에서 딜레이를 지속할 시간을 설정합니다. 예시를 따라 하려면
5.0초로 설정합니다.이벤트 그래프(EventGraph)에서 Sequence 노드로 이동합니다. 딜레이를 삽입할 수 있도록 Then 2 핀을 드래그해 Delay 노드를 생성합니다.
Duration 핀을 드래그해 Get LevelLoadDelay를 생성합니다.
블루프린트를 저장 및 컴파일한 후 닫습니다.
최종 BP_LevelTransition 이벤트 그래프가 다음과 같은 모습이 되어야 합니다.
이제 레벨을 다시 테스트해 보면 플레이어가 레벨 전환 지점과 오버랩되면 승리 화면이 표시되고 배경이 흐려지며, 5초 동안 플레이어 입력이 비활성화된 후에 다음 레벨에서 플레이어 캐릭터가 나타납니다.
레벨을 최종 플레이테스트하기 전에 Room 3에서 키를 제거하고 BP_Enemy의 Max Speed를 다시 200으로 설정하는 것을 잊지 마세요.
콘셉트에서 제작까지
프로젝트 구성 및 레벨 윤곽 작업에서 만든 윤곽 작업을 최종 레벨과 비교해 살펴보겠습니다. 초기 디자인과 비교하면, 버그를 해결하고 새 기능을 만들고 플레이테스터가 개발 과정에서 발견한 제한을 극복하기 위해 레벨 디자인과 게임플레이 루프가 변경되었습니다.
윤곽 작업을 통해 모듈식으로 레벨을 만들고, 디자인을 통해 기술 문제를 해결하고, 에셋을 체계적으로 정리하면, 제한이나 새로운 기능으로 인해 게임 개발 과정이 바뀔 때 유연하게 대처할 수 있습니다.
이 트랙을 완료함으로써 콘셉트부터 플레이 가능한 데모까지 레벨을 완성해 보았습니다. 이제 단순히 하나가 아닌, 그 이상의 레벨을 디자인할 수 있는 기본 구성 요소가 생긴 것입니다. 스위치, 함정, 키, 문, 적을 어떤 방법으로든 조합하여 자신만의 스타일로 새로운 게임플레이 루프를 디자인할 수 있습니다. 이러한 요소가 한데 어우러져 레벨이 되고, 각 레벨은 훨씬 더 큰 프로젝트를 이루며, 나아가 완성된 게임이 탄생하게 됩니다.
예시 프로젝트
아래에는 이 튜토리얼 문서 시리즈를 활용해 만들 수 있는 최종 프로젝트를 다운로드할 수 있는 링크가 나와 있습니다. 이 예시 프로젝트를 통해 자신의 최종 프로젝트가 어떤 모습일지 예상해 보거나, 에픽에서 프로젝트를 어떻게 만들고 디자인했는지 이해하기 위한 참고 자료로 예시를 활용할 수도 있습니다.
(다운로드 크기: 75MB)
프로젝트를 열려면 파일의 압축을 풀고 adventuredesigner 폴더를 언리얼 엔진 프로젝트 디렉터리(디폴트 폴더: C:\Users\UserName\Documents\Unreal Projects)로 옮깁니다.
다음 순서
레벨에서 머티리얼, 라이팅, 포스트 프로세스 이펙트, 사운드 및 비주얼 이펙트를 추가하여 작업을 계속하려면 아티스트 트랙 튜토리얼 시리즈를 따라 해 보세요.
Art Pass for a Puzzle Adventure Game
Learn how you can apply art workflows with materials, sounds, and visual effects to the Puzzle Adventure game.
다른 블루프린트 빌드 과정을 알아보려면 디자이너 트랙 튜토리얼 시리즈의 다음 보너스 모듈을 계속 진행하면 됩니다.
보너스: 새 큐브 스폰
퍼즐 어드벤처 게임에 BP_Cube 액터가 정해진 한도까지 스폰되는 새 메커니즘을 추가하는 방법을 살펴봅니다.
프로젝트를 독립형 프로그램으로 패키징하여 테스트하고 공유하려는 경우 다음 문서를 참고하세요.
언리얼 엔진 프로젝트 패키징
배포용 언리얼 게임 프로젝트를 패키지로 만듭니다.