이 튜토리얼에서는 다음과 같은 두 개의 일반적인 게임플레이 오브젝트를 제작하여 플랫폼 퍼즐을 만들어 봅니다.
압력 플레이트 스위치
플레이어에게 반응하는 피직스 큐브
레벨 디자인과 시간, 피직스, 대미지 같은 게임 메커니즘을 사용하여 퍼즐의 난이도를 조정하고 플레이어의 액션에 어떤 결과를 가져오는지 살펴보겠습니다.
시작하기 전에
이 튜토리얼에서는 사용자가 퍼즐 어드벤처 디자인하기의 이전 섹션에서 다룬 다음 주제를 이미 이해하고 있다고 가정합니다.
머티리얼
블루프린트
변수
블루프린트 인터페이스
에디터에서 플레이 모드
키 만들기에서 만든 다음 에셋이 필요합니다.
M_BasicColor_Blue
게임플레이 디자인 접근법
장르에 관계없이 매력적인 게임플레이는 플레이어에게 어떤 감정이 들게 합니다. 플레이어 대 플레이어의 대결에서 흥미진진함을 느끼고, 농장 시뮬레이션 게임에서는 편안함을 느낍니다. 이러한 감정적 반응은 플레이어의 몰입도에 기여합니다. 게임이 매력적이지 않으면 플레이어가 계속 플레이할 가능성이 낮아져 프로젝트의 성공에 영향을 미칠 수 있습니다.
레벨 디자인과 게임 메커니즘을 통해 게임플레이를 설계하는 것이 게임 디자이너의 역할입니다. 레벨을 직관적으로 디자인할 수도 있지만, 이 튜토리얼에서는 공식을 사용하여 프로세스를 시각화하겠습니다.
레벨 디자인
레벨 디자인을 통해 과제의 난이도를 높이거나 낮출 수 있습니다. 예를 들어, 플랫포머 게임에서는 플랫폼에 점프하는 것이 일종의 과제입니다. 캐릭터의 점프 거리 상한선에 플랫폼을 배치하면 플랫폼에 도달하여 과제를 완수하기가 점점 어려워집니다.
하지만 실패에 따른 결과가 없다면, 난이도가 높은 과제도 플레이어를 안심하게 만들 가능성이 높습니다.
안도감은 플레이어가 결과 없이 컨트롤을 배울 수 있는 게임플레이의 튜토리얼 섹션에서 유용합니다.
하지만 지속적인 안도감은 게임에 유용하지 않을 수 있습니다. 예를 들어, 긴장감이 없는 보스전은 지루하게 느껴져, 플레이어의 몰입도가 떨어질 수 있습니다.
플레이어가 긴장감을 느끼게 하기 위해 게임 메커니즘 대미지를 사용하여 어떤 결과를 초래할 수 있습니다.
게임 메커니즘
대미지는 플레이어가 다음과 같이 귀중한 것을 얼마나 잃었는지 숫자로 나타냅니다.
장비
파워업
레벨 진행률
플레이 가능 캐릭터 또는 플레이 불가 동반자
과제의 어려움과 그 결과의 심각성에 따라 플레이어가 느끼는 긴장감이 달라질 수 있습니다.
결과나 보상이 낮고 불필요하게 어려운 과제는 플레이어의 좌절감을 유발할 수 있습니다.
과제를 수행할 때의 긴장감은 플레이어가 승리 조건을 충족했을 때 느끼는 만족감에 영향을 줄 수 있습니다. 특히 보상이 동반되었을 때의 만족감은 게임을 계속할 동기를 유발합니다.
승리 조건은 플레이어가 과제를 성공적으로 완수하기 위해 충족해야 하는 조건입니다.
스위치 생성
스위치는 상호작용할 때 이펙트를 생성하는 게임플레이 오브젝트입니다.
스위치를 만드는 방법을 학습하면 버튼을 눌러 문을 여는 것과 같은 게임플레이 함수 기능을 디자인할 수 있습니다. 이 경우, 스위치를 사용하여 게임 내 액터와 충돌 시 컬러를 변경합니다.
로직으로 제작하기
오브젝트나 플레이어가 오버랩되면 스위치가 활성화됩니다. 제작을 시작하기 전에 언제 누구에게 어떤 일이 일어나야 하는지 설정하여 이 인터랙션을 구동하는 로직의 초안을 작성해 보겠습니다.
스위치 로직은 구체적으로 다음과 같습니다.
런타임에 스위치는 꺼집니다.
플레이어가 스위치를 밟으면 스위치가 켜집니다.
플레이어가 스위치에서 발을 떼면 스위치가 꺼집니다.
스위치에는 두 가지 상태(켜짐 및 꺼짐)가 있으므로 머티리얼을 사용하여 런타임에 각 상태를 시각화할 수 있습니다. 이렇게 하면 테스트 중에 로직이 올바르게 작동하는지 빠르게 확인할 수 있습니다.
머티리얼 제작
스위치의 꺼짐 상태에는 M_BasicColor_Blue를 사용하고 켜짐 상태에는 이미시브 머티리얼을 생성합니다.
이미시브 머티리얼은 빛을 발산합니다.
이미시브 머티리얼을 만들려면 다음 단계를 따릅니다.
콘텐츠 브라우저(Content Browser)의 AdventureGame > Designer > Materials에서 우클릭하고 머티리얼(Material)을 선택합니다.
새 머티리얼을
M_EmissiveColor로 명명하고 더블클릭하여 머티리얼 에디터를 엽니다.머티리얼 그래프에서 우클릭하고 Vector Parameter를 검색합니다. 클릭하여 그래프에 생성하고
Color로 명명합니다. 이는 머티리얼 라이트의 컬러를 제어합니다.Color 노드에서 컬러 스와치를 더블클릭하여 색 선택 툴(Color Picker)을 엽니다.
원하는 컬러를 선택하거나 Hex sRGB
27F774FF로 설정하여 따라해 보세요.우클릭하고 두 개의 노드 constant 노드와 multiply 노드를 추가로 검색합니다.
Color 노드를 Multiply 노드의 A 핀에 연결합니다. 그런 다음 Constant를 Multiply 노드의 B 핀에 연결합니다. 마지막으로 Multiply 노드를 M_EmissiveColor 노드의 Emissive Color 핀에 연결합니다.
상수의 Value는 머티리얼의 이미시브 파워 또는 밝기를 제어합니다. 원하는 대로 조정하거나 튜토리얼을 따라
25로 설정합니다.머티리얼을 저장하고 닫습니다.
이제 머티리얼 폴더의 모습은 다음과 같습니다.
이 튜토리얼에서는 M_EmissiveColor가 유일한 이미시브 머티리얼이므로 인스턴스를 생성할 필요가 없습니다. 하지만 머티리얼 인스턴스는 프로젝트를 모듈식으로 유지하고 개발 환경에서 효율적으로 작업할 수 있는 좋은 수단입니다.
다음으로, 스위치를 제작해 보겠습니다.
블루프린트 클래스 구성
이 스위치는 스태틱 메시와 박스 콜리전으로 구성된 블루프린트가 됩니다. 박스 콜리전은 플레이어와의 접촉을 탐지하여 스위치의 켜짐 및 꺼짐 상태를 트리거합니다.
콜리전은 런타임에 접촉하는 두 오브젝트를 탐지하는 것입니다. 박스 콜리전은 스피어 및 캡슐 콜리전과 함께 이러한 탐지에 사용되는 볼륨입니다. 예를 들어 히트박스는 콜리전 셰이프를 사용하여 성공적인 공격을 탐지합니다.
시작하려면 다음 단계를 따릅니다.
콘텐츠 브라우저의 AdventureGame > Designer > Blueprints에서
Activation이라는 새 폴더를 생성합니다.Activation 안에서 우클릭하여 새 블루프린트 클래스(Blueprint Class)를 생성합니다.
부모 클래스 선택(Pick Parent Class) 대화창에서 액터(Actor)를 선택합니다.
새 블루프린트를
BP_Switch로 명명하고 더블클릭하여 블루프린트 에디터에서BP_Switch를 엽니다.컴포넌트(Components) 탭에서 추가(Add)를 클릭하여 스태틱 메시를 생성하고
큐브(cube)를 검색하여 선택합니다.큐브를
Switch로 명명합니다.디테일(Details) 패널의 트랜스폼(Transform)에서 스위치의 스케일을
2.0,2.0,0.1로 조정합니다.컴포넌트(Components) 탭에서 추가를 클릭하고
박스 콜리전(box collision)을 검색하여 박스 콜리전을 생성합니다.박스 콜리전을
Trigger로 명명합니다.디테일 패널의 위치(Location)에서 박스 콜리전의 Z 값을
200으로 조정합니다.스케일(Scale)에서 스케일을
1.5,1.5,5.0으로 조정합니다. 이 박스 콜리전은 콜리전을 쉽게 포착하기 위해 스태틱 메시보다 두껍습니다.블루프린트를 저장하고 컴파일(Compile)합니다.
이제 블루프린트 폴더의 모습은 다음과 같습니다.
컴파일 실패 시 작업 내용이 손실되지 않도록 하려면 중요한 변경사항이 있는 경우 블루프린트를 저장한 다음 컴파일합니다.
다음으로, 스위치의 행동을 제어하는 변수를 생성해 보겠습니다.
변수 생성
변수를 통해 BP_Switch는 방금 생성한 머티리얼을 참조할 수 있습니다. 스위치에 특정 머티리얼을 하드코딩하는 대신, 머티리얼을 즉시 교체할 수 있습니다. 이 작업은 튜토리얼의 뒷부분에서 할 예정입니다.
지금은 BP_Switch에서 다음 변수를 생성합니다.
변수 이름 | 타입 | 기본값 | 설명 |
OnMaterial | 머티리얼 인터페이스 |
| 스위치가 켜졌을 때의 컬러입니다. |
OffMaterial | 머티리얼 인터페이스 |
| 스위치가 꺼졌을 때의 컬러입니다. |
내 블루프린트(My Blueprint) 탭의 변수(VARIABLES)에서 + 버튼을 두 번 클릭하여 두 개의 새 변수를 생성합니다.
하나는
OnMaterial, 다른 하나는OffMaterial로 명명합니다.핀 타입을 머티리얼 인터페이스(Material Interface) (오브젝트 레퍼런스)로 설정합니다.
OnMaterial을 선택합니다. 디테일 패널의 카테고리(Category) 옆에
Setup이라는 새 카테고리를 생성합니다.컴파일을 클릭하여 기본값(Default Value)에 액세스합니다. 기본값에서
M_EmissiveColor를 선택합니다. 이 변수는 이제 완료되었습니다.OffMaterial을 선택합니다. 디테일 패널에서 이를 Setup 카테고리에 추가합니다.
기본값에서
M_BasicColor_Blue를 선택합니다.저장 및 컴파일합니다.
이제 블루프린트가 머티리얼을 참조할 수 있으므로, 로직을 사용하여 머티리얼을 사용할 시점을 스위치에 지시할 것입니다.
로직 구현
박스 콜리전, 스태틱 메시, 그리고 두 개의 머티리얼이 있어야 합니다. 이제 스위치의 로직을 다음과 같이 작성할 수 있습니다.
런타임에 Switch는 OffMaterial을 표시해야 합니다.
Trigger가 콜리전을 탐지하는 경우, Switch의 머티리얼을 OnMaterial로 설정합니다.
Trigger가 콜리전 탐지를 중단하는 경우, Switch의 머티리얼을 OffMaterial로 설정합니다.
이 로직을 빌드하려면 다음과 같이 컨스트럭션 스크립트를 사용하여 BP_Switch가 런타임에 OffMaterial을 사용하도록 지시합니다.
Construction Script 탭에서 Construction Script 노드의 Exec 핀을 드래그하여 Set Material (Switch)를 검색하고, 클릭하여 생성합니다.
Set Material 노드의 Material 핀에서 드래그하여 Get OffMaterial을 검색하여 선택합니다.
저장 및 컴파일합니다.
나머지 로직은 이벤트그래프에서 처리합니다. 오버랩 시 스위치를 켜고 끄도록 지시하려면 다음 단계를 따릅니다.
이벤트 그래프에서 Event BeginPlay, Event ActorBeginOverlap, Event Tick 노드는 필요하지 않으니 삭제합니다.
내 블루프린트(My Blueprint) 탭의 컴포넌트 헤더에서 Trigger를 우클릭하고 이벤트 추가(Add Event) > OnComponentBeginOverlap 추가(Add OnComponentBeginOverlap)를 선택합니다.
이 프로세스를 반복하여 OnComponentEndOverlap 노드도 추가합니다.
OnComponentBeginOverlap(Trigger) 노드의 Exec 핀에서 드래그하여 SetMaterial (Switch)를 검색합니다.
Set Material 노드의 Material 핀에서 드래그하여 Get OnMaterial을 검색합니다.
OnComponentEndOverlap(Trigger) 노드의 Exec 핀에서 드래그하여 Set Material (Switch)를 검색합니다.
Set Material 노드의 Material 핀에서 드래그하여 Get OffMaterial을 검색합니다.
스위치가 완성되었으니 저장 및 컴파일합니다.
이제 컨스트럭션 스크립트 그래프의 모습은 다음과 같습니다.
이제 이벤트그래프의 모습은 다음과 같습니다.
이제 프로젝트를 테스트하여 스위치가 올바르게 기능하는지 확인할 수 있습니다.
콘텐츠 브라우저에서 BP_Switch의 인스턴스를 Room 1로 드래그합니다. 플레이 모드(Playmode) 툴바에서 점 3개 메뉴를 클릭하고 현재 카메라 위치(Current Camera Location)를 선택합니다. 이렇게 하면 하나의 기능을 테스트하기 위해 레벨 전체를 실행하는 대신, 뷰포트의 현재 위치에서 PIE 모드로 전환할 수 있습니다.
PIE 모드에서 스위치를 밟으면 불이 들어옵니다. 스위치에서 물러서면 파란색으로 돌아갑니다.
모듈식 개발의 이점
하나가 아닌 두 개의 스위치가 필요하며, 두 번째 스위치는 녹색 대신 빨간색으로 켜지게 한다고 가정해 보겠습니다. 동일한 로직으로 새 스위치를 만들어 빨간색 머티리얼을 할당할 수도 있지만, 그렇게 하면 개발 시간이 많이 들고 프로젝트에 더 많은 오버헤드가 발생합니다.
오버헤드(Overhead)는 처리 능력, 시간, 스토리지 양 등의 리소스 소모를 말합니다.
플랫폼(컴퓨터 및 콘솔)의 처리 능력은 유한하므로 게임 개발자는 보통 오버헤드를 줄이기 위해 모듈식으로 작업하기를 원합니다.
블루프린트와 변수를 사용하여 스위치를 제작했으므로 이미 모듈식으로 작업하고 있는 것입니다. 다음과 같은 방법으로 스위치가 작동하는지 확인해 보겠습니다.
콘텐츠 브라우저에서
BP_Switch를 더블클릭하여 블루프린트 에디터에서 엽니다.변수에서 OnMaterial을 선택하고 눈 모양 아이콘을 클릭하여 엽니다.
OffMaterial을 선택하고, 동일한 작업을 다른 방식으로 수행해 보겠습니다. 디테일 패널에서 인스턴스 편집가능(Instance Editable)을 활성화합니다. 눈 아이콘이 떠 있는 것을 볼 수 있습니다. 이제 퍼블릭 변수가 되었습니다.
저장 및 컴파일하고 닫습니다.
레벨에 이미 하나의 BP_Switch 인스턴스가 있을 것이므로 두 번째 인스턴스를 드래그합니다. 뷰포트에서 두 스위치 중 하나를 선택하면 디테일 패널에 Setup이라는 새 UI 카테고리가 표시됩니다. 이는 변수 생성에서 생성한 변수 카테고리입니다. Setup은 퍼블릭 변수를 뷰포트에서 즉시 변경할 수 있는 파라미터로 표시합니다.
머티리얼을 원하는 것으로 변경하고 PIE 모드에서 스위치가 어떻게 반응하는지 테스트해 보세요. 새로운 스위치를 처음부터 만들지 않아도 스위치의 각 인스턴스가 고유한 켜짐 및 꺼짐 머티리얼을 보유할 수 있으므로 개발 속도가 빨라지고 오버헤드가 줄어듭니다.
뷰포트를 실제 뷰포트와 똑같이 보이게 하려면 이 튜토리얼을 진행하기 전에 스위치의 두 번째 인스턴스를 삭제해야 합니다.
단일 및 다중 활성화 구현
현재 스위치는 무한히 켜지고 꺼집니다. 경우에 따라 스위치를 한 번만 활성화하는 것이 좋습니다. 예를 들어, 전리품으로 이어지는 복도에서 플레이어가 피해야 하는 함정을 활성화하는 스위치가 필요할 수 있습니다. 플레이어가 함정을 성공적으로 피하고 전리품을 수집하면 스위치가 함정을 다시 활성화하지 않아야 합니다.
이미 만든 것을 폐기하는 대신 부울을 추가하여 스위치를 한 번만 사용할 수 있도록 합니다.
변수 이름 | 타입 | 기본값 | 설명 |
ActivateOnce | 부울 | False | 이 스위치를 반복적으로 활성화할지 아니면 한 번만 활성화할지 여부입니다. |
이렇게 하려면 다음 단계를 따릅니다.
BP_Switch의블루프린트 에디터에서 변수 아래의 + 버튼을 클릭하여 새 변수를 추가합니다.ActivateOnce로 명명하고 핀 타입을 부울(Boolean)로 설정합니다.디테일 패널에서 인스턴스 편집가능 체크 박스를 선택합니다.
카테고리 옆의 드롭다운 메뉴를 클릭하고 Setup을 선택합니다.
컴파일(Compile)을 클릭하여 변수의 기본값에 액세스하고 선택 해제되어 있는지 확인합니다. 즉, 이 블루프린트에서는 ActivateOnce가 기본적으로 켜져 있지 않습니다.
이벤트그래프에서 우클릭하고 Branch 노드를 검색합니다.
Branch 노드의 Condition 핀에서 드래그하여 Get ActivateOnce를 검색합니다.
On Component End Overlap (Trigger) 노드의 Exec 핀을 Branch 노드의 Exec 핀으로 드래그합니다. SetMaterial 노드와의 연결이 해제됩니다.
Branch 노드의 False 핀을 Set Material 노드의 Exec 핀에 연결합니다. 즉, 오브젝트가 스위치에서 벗어날 때 다음과 같은 결정이 내려집니다. ActivateOnce가 True로 토글되면 스위치가 콜리전 탐지를 멈춥니다. ActivateOnce가 False로 토글되면 스위치가 무한히 작동합니다.
블루프린트를 저장 및 컴파일하고 닫습니다.
뷰포트에서
BP_Switch를 선택합니다. 디테일 패널에서 ActivateOnce는 이 인스턴스에 대한 토글 가능한 체크 박스여야 합니다. 활성화하여 어떻게 작동하는지 확인합니다.
이제 이벤트그래프의 모습은 다음과 같습니다.
플레이를 클릭하여 PIE 모드에서 변수를 테스트합니다. ActivateOnce를 활성화하면 스위치에서 걸어 나온 후에도 스위치가 계속 켜져 있어야 합니다.
피직스로 스위치 활성화
이 튜토리얼 후반부에서는 플레이어가 스위치를 누른 상태로 나머지 레벨을 탐색하게 됩니다. 이를 위해 이 퍼즐의 두 번째 게임플레이 오브젝트인 피직스 큐브를 만들어 보겠습니다. 이는 게임 메커니즘인 피직스를 디자인한 퍼즐에 적용합니다.
블루프린트를 사용하여 피직스 큐브를 만들려면 다음 단계를 따릅니다.
콘텐츠 브라우저에서 AdventureGame > Designer > Blueprints > Activation로 이동하여 우클릭하고 새 블루프린트 클래스를 생성합니다.
부모 클래스 선택(Pick Parent Class) 대화창에서 액터(Actor)를 선택합니다.
새 블루프린트를
BP_Cube로 명명합니다.BP_Cube를 더블클릭하여 블루프린트 에디터에서 엽니다.컴포넌트(Components) 탭에서 추가(Add)를 클릭하여 스태틱 메시를 생성하고
큐브(cube)를 검색하여 선택합니다.메시를
Cube로 명명합니다.디테일 패널의 스태틱 메시(Static Mesh)에서 SM_ChamferCube를 검색하여 선택합니다.
Z 위치를
50.0으로 설정합니다.머티리얼(Materials)에서 엘리먼트 0(Element 0)을
M_BasicColor_Blue로 설정합니다.피직스(Physics)에서 피직스 시뮬레이트(Simulate Physics)를 활성화합니다. 이 세팅은 UE의 카오스 피직스 엔진 사용을 활성화하여 큐브가 플레이어의 푸시에 반응하도록 합니다.
저장 및 컴파일합니다.
함수 기능을 테스트하려면 BP_Cube 인스턴스를 스위치 근처의 레벨로 드래그합니다. 플레이를 눌러 PIE 모드로 전환하고 WASD 문자 키를 사용하여 BP_Cube를 스위치에 밀어 넣어 스위치를 켭니다.
디버그
큐브를 스위치에 밀어 넣으면 켜지지만 문제가 발생할 수 있습니다. 스위치에서 나가면 큐브가 여전히 오버랩되어 있더라도 스위치가 꺼집니다.
현재 로직을 살펴보고 오류를 찾습니다.
Trigger가 콜리전 탐지를 중단하는 경우, Switch의 머티리얼을 OffMaterial로 설정합니다.
이 문제를 해결하려면 진행하기 전에 Trigger에 오버랩되는 액터가 있는지 확인하도록 지시합니다.
Trigger가 콜리전 탐지를 중단하고 오버랩되는 액터가 없는 경우, Switch의 머티리얼을 OffMaterial로 설정합니다.
블루프린트를 조정하려면 다음 단계를 따릅니다.
BP_Switch의 블루프린트 에디터에서 우클릭하고 Branch 노드를 생성합니다.Condition 핀에서 드래그하여 Is Empty (Array) 노드를 검색하고 생성합니다.
Is Empty 노드의 Target Array 핀에서 Get Overlapping Actors (Trigger)를 검색하여 생성합니다.
Class Filter를 액터로 설정합니다.
첫 번째 Branch 노드의 False 핀에서 드래그하여 이 로직을 기존 노드에 연결하고 두 번째 Branch 노드의 Exec 핀에 연결합니다.
두 번째 Branch 노드의 True 핀을 Set Material 노드의 Exec 핀에 연결합니다.
저장 및 컴파일합니다.
이제 이벤트그래프의 모습은 다음과 같습니다.
Trigger의 콜리전 세팅을 조정하려면 다음 단계를 따릅니다.
컴포넌트 탭에서 Trigger를 선택합니다.
디테일 패널의 콜리전 프리셋(Collision Presets) 헤더에서 드롭다운 메뉴를 커스텀(Custom)으로 설정합니다.
콜리전 활성화됨(Collision Enabled) 드롭다운에서 콜리전 켜짐 (쿼리 및 피직스)(Collision Enabled (Query and Physics))을 선택합니다.
오브젝트 타입(Object Type) 드롭다운에서 WorldDynamic을 선택합니다.
WorldDynamic 옆의 무시(Ignore)를 선택합니다.
저장 및 컴파일합니다.
PIE 모드로 전환하여 솔루션을 테스트합니다. 스위치는 액터가 오버랩되는 한, 다른 액터가 벗어나더라도 이와 관계없이 계속 켜져 있어야 합니다.
추가 함수 기능 만들기
지금까지 켜고 끄는 스위치를 만들었습니다. 스위치가 올바르게 기능하는지 시각화하는 데 탁월하지만 더 유용할 수 있습니다. 다음으로, 스위치를 사용하여 레벨 내 다른 오브젝트를 활성화해 보겠습니다.
먼저, 두 개의 함수가 있는 블루프린트 인터페이스(Blueprint Interface)를 생성합니다. 각각은 스위치의 켜짐 및 꺼짐 상태를 나타냅니다. 이러한 함수는 오브젝트 간에 신호를 보내는 이벤트처럼 사용됩니다.
콘텐츠 브라우저에서 AdventureGame > Designer > Blueprints > Core로 이동하여 우클릭하고 블루프린트(Blueprint)를 하이라이트합니다. 그런 다음 블루프린트 인터페이스를 선택합니다.
인터페이스를
BPI_Interaction으로 명명합니다. 더블클릭하여 블루프린트 인터페이스 창을 엽니다.내 블루프린트 패널에 새 함수가 이미 있어야 합니다. 함수를
fnBPISwitchOn으로 명명합니다.추가를 클릭한 다음, 함수를 클릭하여 두 번째 함수를 생성하고,
fnBPISwitchOff로 명명합니다.인터페이스가 완성되었으니, 저장 및 컴파일하고 닫습니다.
다음으로, 스위치를 활성화하려는 모든 오브젝트가 포함된 배열을 생성해 보겠습니다. 이 튜토리얼에서는 새 오브젝트마다 고유한 로직을 생성하는 대신 배열을 사용하여 스위치로 활성화할 오브젝트를 관리합니다.
변수 이름 | 타입 | 기본값 | 설명 |
InteractObjectList | 액터 배열 | 없음 | 이 스위치가 활성화하는 액터의 배열입니다. |
BP_Switch의 내 블루프린트 탭에서 변수 아래의 + 버튼을 클릭하여 새 변수를 생성합니다.변수를
InteractObjectList로 명명하고 핀 타입을 액터(오브젝트 레퍼런스)로 설정합니다.디테일 패널의 변수 타입(Variable Type) 옆에서 컨테이너 타입을 배열(Array)로 설정합니다.
이를 UI 파라미터로 만들려면 인스턴스 편집가능을 선택하고 Setup 카테고리에 추가합니다.
저장 및 컴파일합니다.
로직을 사용하여 현재 비어 있는 배열의 각 오브젝트를 반복작업하고 앞서 생성한 BPI_Interaction 인터페이스를 사용하여 신호를 보내도록 스위치에 지시합니다. 이를 위해 For Each Loop를 사용합니다.
이렇게 하려면 다음 단계를 따릅니다.
이벤트그래프에서 Set Material 노드(On Component Begin Overlap 노드)의 Exec 핀에서 드래그하여 For Each Loop를 검색합니다.
어떤 오브젝트에 이벤트를 수행하도록 지시하려면 For Each Loop의 Array 핀을 드래그하고 Get InteractObjectList를 검색합니다.
마지막으로 For Each Loop에서 Loop Body 핀을 드래그하여 fnBPISwitchOn을 검색합니다. 이것이 호출할 이벤트입니다.
For Each Loop의 Array Element 핀을 fnBPISwitchOn 노드의 Target 핀에 연결합니다.
On Component End Overlap (Trigger)에 대해서도 동일한 작업을 수행해야 합니다. 프로세스 속도를 높이려면 For Each Loop 및 Interact Object List 노드를 선택하고 우클릭 > 복사하기(Copy) 또는 Ctrl + C를 사용하여 복사합니다. Ctrl + P를 눌러 그래프에 붙여넣습니다.
Set Material 노드의 Exec 핀을 For Each Loop의 Exec 핀에 연결합니다.
For Each Loop의 Loop Body 핀에서 드래그하여 fnBPISwitchOff를 검색합니다. Array Element 핀을 Target 핀에 연결합니다.
이제 스위치가 완성되었습니다. 저장 및 컴파일하고 닫습니다.
이제 이벤트그래프의 모습은 다음과 같습니다.
이제 스위치의 각 인스턴스별로 레벨에서 고유한 오브젝트 목록을 활성화하기 위한 토대가 마련되었습니다. 다음 튜토리얼에서는 이 도전 과제의 세 번째 게임플레이 오브젝트인 이동하는 플랫폼을 만들어 보겠습니다.