이 튜토리얼에서는 플레이어가 스위치 위에 서면 레벨에 새 큐브를 스폰하는 블루프린트를 생성하는 방법을 살펴봅니다. 플레이어는 이 게임플레이 오브젝트를 사용하여 퍼즐 방에서 새 큐브를 얻을 수 있으며, 큐브는 사라지거나 소멸될 수 있습니다.
큐브 스포너의 경우, 스폰 기능만 포함하는 블루프린트를 만들어 모든 지오메트리와 아트 에셋을 유연하게 사용할 수 있게 하고 지오메트리에서 큐브가 떨어지는 이펙트를 생성할 수 있습니다.
샘플 레벨을 따라했다면 이 블루프린트를 만들지 않아도 되지만, 퍼즐 어드벤처 게임을 계속 확장하려면 프로젝트에 이 큐브 재생성 메커니즘을 포함하는 것이 좋습니다.
시작하기 전에
퍼즐 어드벤처 디자인하기 튜토리얼 시리즈의 이전 섹션에서 다룬 다음과 같은 주제를 이해하고 있어야 합니다.
블루프린트 인터페이스, 커스텀 이벤트 및 변수를 비롯한 블루프린트 기초
퍼즐: 스위치 및 큐브에서 생성한 다음과 같은 에셋이 필요합니다.
BP_Cube블루프린트BP_Switch블루프린트BPI_Interaction블루프린트 인터페이스
새 블루프린트 생성
먼저 큐브 스포너에 대한 새 블루프린트 에셋을 생성합니다. 이 블루프린트는 BPI_Interaction 블루프린트 인터페이스를 구현하여 해당 인터페이스의 이벤트를 사용하는 BP_Switch에 응답할 수 있게 해줍니다.
새 블루프린트를 구성하려면 다음 단계를 따릅니다.
콘텐츠 브라우저에서 콘텐츠 > Adventure Game > Designer > Blueprints > Activation 폴더로 이동합니다.
우클릭하고 블루프린트 클래스(Blueprint Class)를 클릭합니다. 클래스 선택 창에서 액터(Actor) 클래스를 선택합니다.
블루프린트를
BP_CubeSpawn으로 명명하고 엽니다.블루프린트 에디터에서 이벤트그래프(EventGraph) 탭으로 이동합니다.
블루프린트 에디터 상단에서 클래스 세팅(Class Settings) 버튼을 클릭합니다.
디테일(Details) 패널의 인터페이스(Interfaces) 섹션에서 구현된 인터페이스(Implemented Interfaces) 옆에 있는 추가(Add) 드롭다운을 클릭하고 BPI 인터랙션(BPI Interaction)을 선택합니다.
컴파일(Compile)하고 저장(Save)합니다.
BPI_Interaction 인터페이스를 추가하면 내 블루프린트(My Blueprint) 패널에 '인터페이스'라는 새 섹션이 표시됩니다. 이 섹션은 BPI 인터랙션 인터페이스의 일부인 fnBPISwitchOff 및 fnBPISwitchOn 이벤트를 포함합니다.
BP_CubeSpawn에서 fnBPISwitchOn 이벤트를 사용하여 플레이어가 스위치를 밟아 이벤트를 트리거하면 무슨 일이 일어나는지 정의합니다.
큐브 스폰 로직 빌드
큐브 스폰 로직을 구현하기 전에 큐브 스폰 시스템이 어떻게 작동해야 하는지 미리 생각해 두는 것이 좋습니다.
큐브를 스폰하려면 플레이어는 지난 섹션에서 추가한 인터페이스를 사용하는 스위치를 활성화해야 합니다.
큐브가 너무 많이 스폰되지 않도록 플레이어가 스폰할 수 있는 큐브의 최대 수를 설정해야 합니다.
플레이어가 최대 한도보다 많은 큐브를 스폰하려고 시도하면 가장 먼저 스폰된 큐브가 소멸합니다. 스폰된 큐브는 배열 변수를 사용하여 계속 트래킹할 수 있습니다.
큐브 스포너는 플레이어가 새 큐브를 너무 빨리 스폰할 수 없게 짧은 쿨다운 타이머를 사용해야 합니다.
큐브 스폰 조건 확인
큐브 스포너 이벤트 그래프를 시작하려면 먼저 새 큐브가 스폰될 수 있는지 또는 플레이어가 큐브 최대 수에 도달했는지 여부를 확인해야 합니다.
새 큐브를 스폰할 수 있는지 확인하려면 다음 단계를 따릅니다.
내 블루프린트 패널의 인터페이스 카테고리에서 fnBPISwitchOn 인터페이스를 더블클릭하여 그래프에 추가합니다.
fnBPISwitchOn 노드에서 실행 핀을 드래그하여 Branch 노드를 추가합니다.
Branch 노드의 조건(Condition) 핀에서 드래그하여 변수로 승격(Promote to variable)을 선택하고, 이 변수를
CanSpawn으로 명명합니다. 이 변수를 사용하여 쿨다운이 지났는지 여부를 확인합니다.내 블루프린트 패널에서 인티저(Integer) 타입의 새 변수
CubesSpawned를 생성합니다. 이 변수는 레벨에 스폰된 큐브를 트래킹합니다.MaxNumCubes라는 새 변수를 생성합니다. 이 변수는 플레이어가 스폰할 수 있는 큐브의 최대 수를 설정합니다.MaxNumCubes를 구성합니다.
타입을 인티저로 설정합니다.
눈 모양의 아이콘을 클릭하여 편집 가능한 퍼블릭 변수로 만듭니다.
디테일 패널에서 카테고리(Category) 필드를 클릭하고
Setup을 입력합니다.컴파일을 클릭하고 변수의 디폴트 값(Default Value)을
3으로 설정합니다.지금까지 작업한 변수는 다음과 같아야 합니다.
Branch 노드의 True 핀에서 드래그하여 두 번째 Branch 노드를 추가합니다.
두 번째 Branch 노드에서 조건 핀에서 드래그하여 Less Than (<) 노드를 추가합니다.
다음과 같이 Less Than 노드를 구성하여 스폰된 큐브 수가 허용된 최대 큐브 수 미만인지 확인합니다.
변수(Variables) 목록에서 CubesSpawned를 Less Than 노드의 상단 입력 핀으로 드래그합니다.
MaxNumCubes 변수를 하단 입력 핀으로 드래그합니다.
스폰된 큐브 수 세기 및 나머지 큐브 소멸시키기
현재 플레이어가 스폰한 큐브 수가 최댓값보다 적으면 실행이 두 번째 Branch 노드의 True 핀을 통과합니다. 이 경우, 큐브 수에 1을 더하고 큐브를 스폰하는 로직으로 곧장 건너뛸 수 있습니다.
스폰된 큐브 수를 늘리려면 다음 단계를 따릅니다.
두 번째 Branch 노드의 True 핀에서 드래그하여 Increment Int 노드를 추가합니다. 새 노드를 옮겨서 Branch 노드와의 사이에 자리를 만듭니다.
변수 목록에서 CubesSpawned를 Increment Int 노드 입력 핀으로 드래그합니다.
다음으로는 반대의 경우, 즉 CubesSpawned 값이 MaxNumCubes 값보다 큰 경우 실행이 해당 Branch 노드의 False 핀을 통과할 때의 로직을 추가합니다.플레이어가 최대 큐브 수에 도달하면 가장 오래된 큐브를 소멸시키고 새 큐브를 스폰합니다.
큐브를 소멸시켜서 새 큐브를 위한 자리를 만들려면 다음 단계를 따릅니다.
두 번째 Branch 노드의 False 핀에서 드래그하여 Destroy Actor 노드를 추가합니다.
Destroy Actor 노드의 타깃(Target) 핀에서 드래그하여 Get (a copy) 노드를 추가합니다.
배열의 목록은 0에서 시작하고 첫 번째 엘리먼트를 얻어야 하므로 Get 노드의 두 번째 입력 핀 세트를 0으로 유지합니다.
Get 노드의 배열(Array) 입력 노드에서 드래그하여 변수로 승격을 선택합니다.
새 변수를
SpawnedCubes로 명명합니다. 이 배열을 사용하면 플레이어가 레벨에 스폰한 모든 큐브를 저장할 수 있습니다.Destroy Actor 노드의 실행 핀에서 드래그하여 Remove Index 노드를 추가합니다.
배열 입력에서 드래그하여 Get Spawned Cubes 레퍼런스 노드를 추가합니다.
두 번째 Branch 노드와 Increment Int 노드 사이의 선을 더블클릭하여 이동 가능한 경유 노드를 생성합니다. 경유 노드를 Increment Int 노드에 가깝게 드래그합니다.
Remove Index 노드의 출력 실행 핀을 경유 노드에 연결합니다.
Remove Index 노드를 Increment Int 노드에 직접 연결할 수도 있습니다.
이제 블루프린트는 큐브를 스폰하기 전에 CubesSpawned 카운터를 늘리거나 큐브를 삭제한 다음 CubesSpawned 카운터를 늘립니다. 이제 새 큐브를 스폰하는 로직을 추가합니다.
큐브 스폰
플레이어가 큐브를 생성할 수 있는지 또는 레벨에 큐브가 너무 많지는 않은지 여부를 확인했으므로 새 BP_Cube 액터를 스폰할 수 있습니다.
새 큐브를 스폰하려면 다음 단계를 따릅니다.
Add 노드의 실행 핀에서 드래그하여 Spawn Actor from Class 노드를 추가합니다.
SpawnActor 노드를 구성합니다.
클래스(Class) 핀 옆의 드롭다운 메뉴를 클릭하고
BP_Cube를 검색하여 선택합니다. 노드 이름이 SpawnActor NONE에서 SpawnActor BP Cube로 변경됩니다.주황색 스폰 트랜스폼(Spawn Transform) 핀을 우클릭하고 구조체 핀 분할(Split Struct Pin)을 선택합니다. '스폰 트랜스폼' 핀이 스폰 트랜스폼 위치(Spawn Transform Location), 스폰 트랜스폼 회전(Spawn Transform Rotation), 스폰 트랜스폼 스케일(Spawn Transform Scale)이라는 새로운 핀 3개로 대체됩니다.
전체 노드가 아니라 원형의 스폰 트랜스폼 핀을 클릭해야 합니다.
이벤트 그래프에서 우클릭하고 Get Actor Transform 노드를 검색하여 선택합니다. 반환 값(Return) 핀에서 우클릭하고 구조체 분할(Split Struct)을 선택합니다. 위치(Location) 및 회전(Rotations) 핀을 Spawn Actor 노드의 해당 핀에 연결합니다.
SpawnActor 노드의 실행 핀에서 드래그하여 배열 카테고리의 Add 노드를 추가합니다.
Add Array로 검색하고 Add 노드를 추가해도 됩니다.Add Array 노드에서 다음 작업을 수행합니다.
배열 입력 핀에서 드래그하여 Get Spawned Cubes 노드를 추가합니다.
노드의 하단 입력 핀을 SpawnActor 노드의 반환 값 핀에 연결합니다.
플레이어가 큐브를 스폰할 때 쿨다운 타이머가 만료되기 전까지는 큐브를 하나 더 스폰할 수 없어야 합니다. Add Array 노드의 실행 핀에서 드래그하여 Set Can Spawn 노드를 추가합니다. 스폰 가능(Can Spawn)을 false, 즉 체크 표시가 없는 상태로 유지합니다.
쿨다운 타이머 구현
CanSpawn 변수와 Delay 노드를 사용하여 일정 시간이 지날 때까지 플레이어가 큐브를 스폰하지 못하게 합니다.
큐브 스폰 쿨다운 타이머를 리셋하는 이벤트를 생성하고 트리거하려면 다음 단계를 따릅니다.
이벤트 그래프에서 빈 공간을 우클릭하고 Add Custom Event를 검색하여 추가합니다.
새 이벤트를
EvResetSpawn으로 명명하고 Event fnBPISwirchOn 노드 아래로 옮깁니다.EvResetSpawn 이벤트 노드의 실행 핀에서 드래그하여 Delay 노드를 추가합니다.
Delay 노드의 기간(Duration) 핀에서 드래그하여 변수로 승격을 선택합니다. 변수를
SpawnCooldown으로 명명합니다.새 SpawnCooldown 변수를 다음과 같이 구성합니다.
타입이 플로트(Float)인지 확인합니다.
눈 모양의 아이콘을 클릭하여 편집 가능한 퍼블릭 변수로 만듭니다.
카테고리를 Setup으로 변경합니다.
컴파일을 클릭한 다음 디폴트 값을
1로 설정합니다. 전체 변수 목록이 다음과 같아야 합니다.
Delay 노드의 완료됨(Completed) 핀에서 드래그하여 Set Can Spawn 노드를 추가합니다. 이 노드의 CanSpawn 값을 true로 토글해야 합니다.
큐브 스폰 로직 끝의 Set Can Spawn 노드로 돌아갑니다. Set Can Spawn 노드의 실행 핀에서 드래그하고 EvResetSpawn 노드를 추가하여 이벤트와 스폰 쿨다운 딜레이를 트리거합니다.
저장 및 컴파일을 클릭합니다.
이제 이벤트 그래프가 다음과 같은 모습이어야 합니다.
아래 스니펫을 사용하는 경우에는 위의 지침에서 언급된 커스텀 변수, 이벤트 및 BP 인터페이스가 블루프린트에 있는지 확인하세요.
이러한 노드를 블루프린트에 복사하려면 스니펫 복사(Copy Snippet)를 클릭하고 이벤트 그래프로 이동하여 Ctrl+V를 누릅니다. 로직을 블루프린트 에디터에 복사한 다음 파란색의 EV Reset Spawn 노드를 삭제하고 Set Can Spawn 노드 뒤에 수동으로 다시 추가해야 할 수도 있습니다.
이제 블루프린트 에디터에서 나가서 레벨 에디터로 돌아갑니다.
레벨에 큐브 스폰 블루프린트 추가
다음으로는 레벨에 BP_CubeSpawn 및 BP_Switch를 구성합니다.
큐브 스포너 블루프린트에는 비주얼 컴포넌트가 없으므로 원하는 지오메트리 또는 아트 에셋 내에 배치하여 지오메트리에서 큐브가 떨어지는 이펙트를 생성할 수 있습니다.
레벨에서 특정 위치를 선택하고 콘텐츠 > LevelPrototyping > Meshes 폴더의 메시로 일부 지오메트리를 윤곽 작업하여 큐브 스포너를 나타냅니다.
샘플 레벨을 사용 중인 경우에는 Room 1 뒤의 공간에 배치하면 됩니다. 이 예시에서는 실린더를 사용하여 큐브가 안에서 스폰되고 떨어지는 파이프를 나타냅니다.
그런 다음 아래 단계를 따라 레벨에서 BP_CubeSpawn을 구성합니다.
콘텐츠 브라우저에서 콘텐츠 > Adventure Game > Designer > Blueprints > Activation 폴더로 이동합니다.
BP_CubeSpawn블루프린트를 레벨 내 원하는 위치로 드래그합니다.콘텐츠 브라우저에서
BP_Switch블루프린트를 레벨에서 큐브 스포너가 보이는 위치로 드래그합니다.레벨에서
BP_Switch액터를 선택합니다.디테일 패널의 Setup 섹션에서 새 배열 엘리먼트를 인터랙트 오브젝트 목록(Interact Object List)에 추가합니다.
인덱스 [0](Index [0]) 옆의 드롭다운을 사용하여
BP_CubeSpawn액터를 선택합니다. 그러면 fnBPISwitchOn 이벤트가 이 스위치에서BP_CubeSpawn액터로 전달됩니다.BP_CubeSpawn액터를 선택합니다. 필요에 따라 Max Cubes Allowed 변수를 레벨 내에서 허용할 큐브 수로 변경합니다.
이제 게임을 플레이하면 스위치를 눌러 새 큐브를 스폰할 수 있습니다.
다음 순서
레벨에서 머티리얼, 라이팅, 포스트 프로세스 이펙트, 사운드 및 비주얼 이펙트를 추가하여 작업을 계속하려면 아티스트 트랙 튜토리얼 시리즈를 따라 해 보세요.
프로젝트를 독립형 프로그램으로 패키징하여 테스트하고 공유하려는 경우 다음 문서를 참고하세요.