이 섹션에서는 첫 게임플레이 오브젝트인 키 블루프린트를 만들어 봅니다.
레벨에서 게임플레이 오브젝트에 대한 함수 기능을 생성하려면 블루프린트 비주얼 스크립팅을 사용합니다. 언리얼 엔진의 블루프린트는 주울 수 있는 플레이어와 같은 특수 함수 기능과 물리적 표현을 갖춘 에셋입니다.
블루프린트 비주얼 스크립팅 시스템을 사용하면 코드를 작성하지 않고도 함수 기능을 만들 수 있습니다. 노드 기반 인터페이스를 사용하여 게임플레이 오브젝트의 행동을 만들기 때문입니다.
먼저, 키의 게임 내 액터를 정의하고, 키를 노란색 타원형, 파란색 사각형, 빨간색 원뿔형 등 세 가지 베리에이션으로 표시하도록 환경설정할 수 있는 컴포넌트를 추가합니다. 각 베리에이션에 대해 별도의 에셋을 만드는 대신 블루프린트를 사용하면 이러한 모든 옵션을 하나의 에셋으로 제작할 수 있습니다.
다음으로, 플레이어 캐릭터가 키를 주울 수 있는 기능인 키의 행동을 추가합니다. 오브젝트를 줍는 것은 가장 일반적인 게임플레이 메커니즘 중 하나입니다.
시작하기 전에
퍼즐 어드벤처 디자인하기의 이전 섹션에서 다룬 다음 주제를 이해하고 있어야 합니다.
프로젝트 구성 및 레벨 윤곽 작업의 다음 에셋이 필요합니다.
윤곽 작업을 한 방이 있는 레벨입니다.
키 타입 및 키 어트리뷰트 정의
키 블루프린트를 만들기 전에 블루프린트가 빨간색, 노란색, 파란색 베리에이션을 생성하는 데 사용할 키 데이터를 정의해야 합니다.
게임에서 사용되는 다양한 키 타입을 나타내기 위해 열거형 과 구조체를 모두 사용합니다.
| 에셋 타입 | 설명 |
|---|---|
열거형(Enumeration) | Enum이라고도 하며, 프로젝트 전체에서 사용할 수 있는 고유 값 목록을 저장합니다. 키의 경우, 열거형을 사용하여 선택할 수 있는 다양한 키 타입(노란색 타원형, 파란색 사각형, 빨간색 원뿔형)을 정의합니다. |
구조체(Structure) | Struct라고도 하며, 관련 정보를 함께 그룹화하는 데 사용됩니다. 키의 경우 구조체를 사용하여 키의 모든 어트리뷰트, 즉 메시(3D 모델)와 해당 메시에 적용할 머티리얼 컬러(빨간색, 노란색, 파란색)를 저장합니다. |
각 열거기는 컨테이너의 라벨 역할을 하며, 구조체는 각 컨테이너의 콘텐츠와 같습니다.
열거형에서 키 타입 정의하기
먼저, 키 베리언트인 빨간색, 노란색, 파란색을 정의하는 열거형 에셋을 생성합니다.
열거형 에셋을 생성하려면 다음 단계를 따릅니다.
언리얼 엔진 좌측 하단에 있는 콘텐츠 드로어(Content Drawer) 버튼을 사용하여 콘텐츠 브라우저(Content Browser) 또는 콘텐츠 드로어를 엽니다.
이 튜토리얼에서 만들 블루프린트 및 지원 에셋을 저장할 장소를 생성합니다. 콘텐츠(Content) > AdventureGame > Designer 폴더로 이동합니다. 이 폴더를 우클릭하고 새 폴더(New Folder)를 클릭합니다.
새 폴더를
Blueprints로 명명합니다.Blueprints 폴더에
Core라는 폴더를 하나 더 생성합니다.Core 폴더를 우클릭하고 블루프린트(Blueprint)로 이동하여 에셋 생성 메뉴에서 열거형(Enumeration)을 클릭합니다. 새 에셋을
Enum_KeyType으로 명명합니다.에셋을 더블클릭하여 새 창에서 엽니다.
열거형에는 열거기 옵션 목록이 포함되어 있습니다.
열거형에 키 타입을 추가하려면 다음 단계를 따릅니다.
열거기 추가(Add Enumerator) 버튼을 세 번 클릭하여 세 개의 새 열거형을 목록에 추가합니다.
첫 번째 열거기의 표시명(Display Name)을
파란색으로 변경합니다. 두 번째는노란색으로, 세 번째는빨간색으로 변경합니다.창 좌측 상단의 저장 버튼을 클릭하여 열거형 에셋 파일을 저장합니다. 또는 CTRL + S를 사용합니다.
열거기를 추가하면 목록에 옵션이 추가됩니다. 파란색, 노란색, 빨간색은 모두 서로 다른 키 타입을 구별하는 데 사용할 값입니다.
블루프린트와 비교하면, 어떤 함수 기능도 컴파일하지 않으므로 데이터 에셋을 컴파일할 필요가 없습니다.
구조체에서 키 어트리뷰트 정의하기
다음으로, 메시 셰이프와 컬러 등 각 키 타입을 구분하는 어트리뷰트를 정의하는 구조체를 생성합니다.
구조체 에셋을 생성하려면 다음 단계를 따릅니다.
콘텐츠 브라우저로 다시 이동하여 콘텐츠 > AdventureGame > Designer > Core 폴더에 있는지 확인합니다.
Core 폴더를 아무 곳이나 우클릭하고 블루프린트로 이동하여 구조체(Structure)를 클릭합니다. 이 에셋을
Struct_KeyData로 명명합니다.새 에셋을 더블클릭하여 구조체의 프로퍼티가 있는 새 창에서 엽니다.
구조체에는 기본적으로 MemberVar_0이라는 변수가 있습니다. 변수 추가(Add Variable)를 클릭하여 두 번째 변수를 추가합니다.
첫 번째 변수의 이름을
Key Material로, 두 번째 변수의 이름을Key Mesh로 변경합니다.각 변수에는 할당된 데이터 타입이 있습니다. 기본적으로 부울(true 또는 false 값)로 설정됩니다. 두 변수의 타입을 모두 변경해야 합니다.
Key Material 변수에서 부울(Boolean) 드롭다운을 클릭합니다. 검색창에
머티리얼 인스턴스(material instance)를 입력하고 머티리얼 인스턴스에 커서를 올린 다음 오브젝트 레퍼런스(Object Reference)를 선택합니다.이 단계를 반복하여 Key Mesh의 변수 타입을 스태틱 메시(Static Mesh) > 오브젝트 레퍼런스로 변경합니다.
구조체 에셋 파일을 저장합니다.
이제 각 키 타입이 사용할 두 개의 어트리뷰트, 즉 키 컬러를 설정할 키 머티리얼과 키 셰이프를 설정할 키 메시를 생성했습니다.
키에 어떤 종류의 데이터가 있는지 정의하는 작업을 마쳤습니다. 다음으로, 키의 컬러를 구성하고 각 키 타입을 실제로 빌드해 보겠습니다.
키 컬러 생성
이제 파란색, 노란색, 빨간색 키 타입에 대한 데이터가 있으므로 각 키 타입에 할당할 해당 컬러로 머티리얼을 생성합니다.
언리얼 엔진에서 머티리얼은 표면의 외형을 정의하며, 컬러, 텍스처, 광택, 투명도 등을 제어합니다. 머티리얼 인스턴스는 머티리얼을 토대로 사용하는 머티리얼의 사본으로, 머티리얼을 처음부터 새로 만들지 않고도 컬러나 텍스처 같은 특정 세팅을 오버라이드할 수 있습니다.
이 예시에서는 게임 내 모든 키의 어트리뷰트를 정의하는 베이스 머티리얼을 생성해 보겠습니다. 그런 다음 해당 머티리얼의 머티리얼 인스턴스를 두 개 생성하여 모든 어트리뷰트를 복사하되 컬러만 오버라이드합니다.
이 섹션에서는 이 튜토리얼 시리즈 전체에서 사용할 수 있도록 몇 가지 머티리얼을 생성하는 방법을 간략하게 안내하며, 머티리얼을 자세히 설명하지는 않습니다.
컬러 머티리얼 에셋을 생성하려면 다음 단계를 따릅니다.
콘텐츠 브라우저로 이동합니다. 콘텐츠 > AdventureGame > Designer 폴더로 이동합니다.
Designer 폴더를 우클릭하고 새 폴더를 클릭합니다. 이 폴더를
Materials로 명명합니다.Materials 폴더로 이동합니다. 폴더에서 우클릭하고 머티리얼(Material)을 선택하여 머티리얼 에셋을 생성합니다.
머티리얼 에셋의 이름을
M_BasicColor로 변경합니다.이 튜토리얼의 샘플 레벨에서는 머티리얼을 식별하는 명명 규칙으로
M_접두사를 사용합니다.머티리얼을 더블클릭하여 엽니다. 그러면 머티리얼 에디터가 새 창에서 열립니다.
머티리얼 에디터는 노드 기반 에디터로, 즉 블루프린트 비주얼 스크립팅과 약간 유사하게 만들어졌습니다. 이 머티리얼의 프로퍼티를 변경하는 데 사용할 수 있는 메인 노드인 M_BasicColor 노드가 보일 것입니다.
베이스 컬러(Base Color) 프로퍼티는 이 머티리얼의 컬러를 설정합니다. 베이스 컬러 옆의 회색 컬러 스와치를 클릭하여 수동으로 컬러를 설정할 수 있습니다.
색 선택 툴을 사용하는 대신 각 머티리얼 인스턴스에서 오버라이드할 수 있는 Color 파라미터 노드를 생성하여 하나의 머티리얼을 여러 컬러로 만들 수 있습니다. 파라미터를 생성하는 것은 변수를 추가하는 것과 같습니다. 머티리얼 컬러를 머티리얼 인스턴스에서 편집 가능한 파라미터로 변환합니다.
컬러 파라미터 노드를 생성하려면 다음 단계를 따릅니다.
베이스 컬러 옆에 핀이 보일 것입니다. 핀을 클릭하고 그래프의 빈 영역으로 드래그합니다.
드롭다운 목록에서 검색창에
VectorParameter를 입력하고 VectorParameter를 선택합니다.그러면 색 선택 툴이 있는 새 노드가 생성됩니다. 벡터 타입 변수에는 3개의 값이 있으므로 이를 사용하여 컬러의 RGB 값을 정의할 수 있습니다.
노드를 처음 생성하면 노드의 디폴트 이름인 Param이 하이라이트됩니다. 머티리얼 인스턴스에서 손쉽게 식별할 수 있도록 노드 이름을 Color로 변경합니다.
파라미터가 하이라이트되지 않은 경우 노드를 클릭하고 노드 이름을 클릭하여 이름을 변경합니다.
새 Color 노드에서 디폴트 값(Default Value) 옆의 체크무늬 사각형을 클릭하여 색 선택 툴을 엽니다.
Hex sRGB 필드에서 값을 노란색인
F7DE0000으로 변경하고 확인을 클릭합니다.머티리얼 에셋을 저장하고 닫습니다.
다음으로, 메인 머티리얼을 다시 생성할 필요 없이 머티리얼 인스턴스를 생성하여 더 많은 컬러를 추가해 보겠습니다.
키 컬러에 대해 3개의 머티리얼 인스턴스를 생성하려면 다음 단계를 따릅니다.
콘텐츠 브라우저에서 생성한
M_BasicColor에셋을 우클릭합니다. 컨텍스트 메뉴 상단에서 머티리얼 인스턴스 생성(Create Material Instance)을 클릭합니다.머티리얼 인스턴스 에셋을
M_BasicColor_Red로 명명합니다. 에셋을 더블클릭하여 엽니다.이 창이 머티리얼 에디터와 다르다는 것을 알 수 있습니다. 이는 머티리얼 인스턴스가 머티리얼의 전체 편집 툴세트를 필요로 하지 않고 베이스 머티리얼에서 정의한 파라미터를 수정하는 데 초점을 맞추기 때문입니다.
디테일(Details) 패널 상단의 파라미터 그룹(Parameter Groups)에서 글로벌 벡터 파라미터 값(Global Vector Parameter Values)을 펼칩니다.
베이스 머티리얼에 추가한 VectorParameter 노드인 비활성화된 Color가 보일 것입니다. 컬러 옆의 체크 박스를 클릭하여 활성화하고 오버라이드합니다.
Color 옆의 컬러 스와치를 클릭하고 Hex sRGB 값을
F7005A00으로 설정합니다. 이렇게 하면 머티리얼 인스턴스가 아름답고 열정적인 빨간색으로 바뀝니다!이제 여러분이 주도할 차례입니다! 이 프로세스를 반복하여 머티리얼 인스턴스를 두 개 더 생성합니다.
이름이
M_BasicColor_Blue인 머티리얼 인스턴스를 생성합니다. 컬러를 Hex sRGB =00AFF700으로 오버라이드하고 에셋을 저장합니다.이름이
M_BasicColor_Yellow인 머티리얼 인스턴스를 생성합니다. 베이스 머티리얼 컬러를 유지하고 에셋을 저장합니다.
머티리얼 에셋에서 상속된 머티리얼 인스턴스 파라미터는 오버라이드하지 않는 한 항상 부모 머티리얼의 값을 사용합니다. 예를 들어 M_BasicColor 머티리얼을 열고 컬러를 변경하면 M_BaseColor_Yellow 머티리얼 인스턴스의 컬러도 변경되지만, 파란색과 빨간색 머티리얼 인스턴스의 컬러는 그대로 유지됩니다.
키 블루프린트 빌드
이제 필요한 요소가 모두 준비되었으므로 키 블루프린트를 생성할 차례입니다. 키 블루프린트는 레벨에 추가하여 인스턴스드 액터를 생성할 수 있는 에셋으로, 플레이어가 주울 수 있는 함수 기능을 갖추고 있습니다.
키에 대한 새 블루프린트 클래스를 생성하려면 다음 단계를 따릅니다.
콘텐츠 브라우저에서 콘텐츠 > AdventureGame > Designer > Blueprints 폴더로 이동합니다.
Key라는 이름의 새 폴더를 생성합니다.Key 폴더로 이동합니다. 브라우저에서 우클릭하고 블루프린트 클래스(Blueprint Class)를 클릭합니다.
액터(Actor)를 부모 클래스로 선택합니다.
이 새 액터를
BP_Key로 명명하고 더블클릭하여 엽니다.이 튜토리얼의 샘플 레벨에서는 블루프린트 클래스를 식별하는 명명 규칙으로
BP_접두사를 사용합니다.
액터 부모 클래스는 일반적으로 레벨에 배치할 수 있는 오브젝트에 사용됩니다. 캐릭터 부모 클래스처럼 이동과 같은 추가 기능이 제공되지는 않지만 인터랙션 및 로직을 만드는 데 사용할 수 있습니다.
창을 메인 에디터에 도킹하려면 해당 탭을 레벨 탭 옆으로 드래그합니다.
키 블루프린트가 제대로 작동하려면 다음과 같은 몇 가지 사항을 추가해야 합니다.
프로젝트에서 키를 시각적으로 나타내는 스태틱 메시
플레이어가 키를 줍기에 충분할 정도로 가까이 왔을 때 이를 탐지하는 콜리전 볼륨
키 타입을 알 수 있는 방법
플레이어가 키와 충돌할 때 발생하는 일을 결정하는 게임 로직
콜리전은 런타임 시 접촉하는 두 오브젝트를 탐지하는 것입니다. 박스, 캡슐, 스피어 콜리전은 이러한 탐지에 사용되는 셰이프입니다.
키의 컴포넌트 구성
먼저, 키의 컴포넌트를 구성하여 게임 월드에 무언가를 배치하고 상호작용할 수 있도록 합니다.
키에 콜리전 컴포넌트와 메시 셰이프를 추가하려면 다음 단계를 따릅니다.
BP_Key에서 뷰포트 탭으로 이동합니다.좌측 상단의 컴포넌트(Components) 패널에서 추가(Add)를 클릭하고 Capsule Collision을 검색하여 선택합니다.
플레이어가 터치하여 키를 주울 수 있는 콜리전 볼륨입니다. 이 옵션이 없으면 플레이어는 키를 탐지할 수 없습니다.
키 메시 자체에 콜리전을 추가할 수도 있지만, 콜리전 셰이프를 사용하면 복잡한 지오메트리를 고르게 다듬을 수 있어 콜리전 탐지와 게임 퍼포먼스가 향상됩니다.
Capsule 컴포넌트를 선택하고 추가를 다시 클릭합니다. 이번에는 Sphere 기본 셰이프를 검색하여 선택하고 이름을
KeyMesh로 변경합니다.Capsule 컴포넌트를 선택한 다음 Sphere 메시를 추가하면 메시는 Capsule의 자손이 되고 Capsule은 메시의 부모가 됩니다. 자손 컴포넌트는 부모로부터 모든 프로퍼티를 상속합니다.
KeyMesh 컴포넌트를 다음과 같이 구성합니다.
KeyMesh 컴포넌트를 선택합니다. 디테일 패널에서 트랜스폼(Transform) 카테고리로 이동합니다. 스케일(Scale) 옆의 값을
0.3,0.3,1.0으로 변경합니다.메시의 측면을 타원형으로 축소합니다.
콜리전(Collision) 카테고리에서 콜리전 프리셋(Collision Presets)을 NoCollision으로 설정합니다.
Capsule 컴포넌트와의 콜리전을 추가했으므로 메시의 콜리전을 비활성화됩니다. 그러면 플레이어 캐릭터가 스태틱 메시를 튕겨 내지 않고 원활하게 키를 수집할 수 있습니다.
캡슐 컴포넌트를 다음과 같이 구성합니다.
캡슐 컴포넌트를 선택합니다. 디테일 패널의 트랜스폼 카테고리에서 위치(Location)를
0.0,0.0,80.0으로 설정합니다.이렇게 하면 키가 지면 위에 떠 있게 됩니다. 메시는 부모 컴포넌트로부터 모든 프로퍼티를 상속하는 자손 컴포넌트이기 때문에 메시가 캡슐과 함께 움직입니다.
셰이프(Shape) 카테고리에서 캡슐 절반 높이(Capsule Half Height)를
60.0으로 설정합니다. 메시를 보다 잘 둘러쌀 수 있도록 콜리전 볼륨을 늘립니다.
컴포넌트 패널에서 DefaultSceneRoot를 선택합니다. 추가를 클릭하고 회전 무브먼트(Rotating Movement)를 선택합니다. 이렇게 하면 키가 천천히 회전하여 플레이어에게 더 흥미로워 보일 수 있습니다.
블루프린트를 저장하고 컴파일(Compile)합니다.
키의 프로퍼티 구성
키에는 키 타입, 각 키 타입에 해당하는 머티리얼 및 메시 같은 정보도 저장해야 합니다.
이를 구성하기 위해 앞서 생성한 키 타입 열거형 및 키 데이터 구조체를 사용합니다.
블루프린트에 키 타입 변수를 추가하려면 다음 단계를 따릅니다.
컴포넌트 패널 아래에 내 블루프린트(My Blueprint) 패널이 있습니다. 변수(Variables) 섹션에서 더하기 버튼을 클릭하여 새 변수를 추가합니다.
변수를
KeyType으로 명명합니다.기본적으로 타입은 부울입니다. 타입 드롭다운을 클릭하고 Enum Key Type을 검색하여 선택합니다. 이 변수 타입은 앞서 생성한 열거형이므로 이제 사용할 차례입니다! 여기에서 KeyType 변수를 빨간색, 노란색, 파란색으로 설정할 수 있다는 뜻입니다.
블루프린트에서 변수 타입은 노드에서 핀으로 표시되기 때문에 핀 타입이라고도 합니다.
KeyType 변수 옆의 눈 모양 아이콘을 클릭하여 편집 가능한 퍼블릭 변수로 만듭니다. 이는 나중에 언리얼 에디터에서 이 변수의 값을 편집하고 레벨에서 각 키의 타입을 설정할 수 있도록 하는 데 중요합니다.
KeyType을 클릭하여 선택합니다. 디테일 패널의 카테고리(Category) 프로퍼티 옆에 있는 디폴트(Default)를 삭제하고
Setup을 입력합니다.이렇게 하면 KeyType 프로퍼티가 디테일 패널의 Setup 카테고리 아래에 표시됩니다.
각 키 타입에는 셰이프와 컬러 조합이 있어야 합니다. 다음 단계에서는 맵 변수를 생성하여 이러한 조합을 정의해 봅니다.
키 타입을 셰이프와 컬러에 매핑하는 변수를 구성하려면 다음 단계를 따릅니다.
내 블루프린트 패널에서 KeyMap이라는 이름의 새 변수를 Enum Key Type 타입으로 추가합니다.
KeyMap 변수를 선택한 상태에서 디테일 패널의 타입 드롭다운 옆에는 변수의 컨테이너 타입 또는 변수가 보유하는 값의 수를 설정하는 또 다른 메뉴가 있습니다. 컨테이너 타입을 맵(Map)으로 변경합니다.
맵 컨테이너를 설정하면 컨테이너 타입 옆에 다른 타입 드롭다운이 표시됩니다. 각 맵 옵션에 저장되는 데이터 타입입니다. 이 키 데이터는 앞서 구조체에서 정의했으므로 드롭다운을 클릭하고 데이터 타입을 Struct_KeyData로 설정합니다.
블루프린트를 컴파일하여 KeyMap을 머티리얼과 메시 셰이프로 채울 수 있도록 각 KeyType 옵션에 대한 머티리얼-메시 쌍을 구성합니다.
디테일 패널에서 디폴트 값 카테고리로 이동합니다.
Key Map 옆의 더하기(+) 버튼을 클릭하여 맵에 새 엘리먼트를 추가합니다.
키 타입(Key Type)을 파란색에서 다른 색으로 변경합니다. 그렇지 않으면 디폴트 키 타입을 가진 엘리먼트가 이미 존재하기 때문에 새 엘리먼트를 추가하지 못할 수도 있습니다.
이를 두 번 더 반복하여 두 번째와 세 번째 엘리먼트를 생성합니다.
3개의 맵 엘리먼트를 추가하고 다음 값으로 키 타입을 구성합니다.
키 타입 키 머티리얼 키 메시 빨간색
M_BasicColor_Red원뿔
노란색
M_BasicColor_Yellow스피어
파란색
M_BasicColor_Blue큐브
KeyMap은 이제 다음과 같습니다.
블루프린트를 저장하고 컴파일합니다.
마지막으로, 플레이어 캐릭터가 키를 터치할 때 해당 레퍼런스를 저장하는 변수가 필요합니다.
다른 액터에 대한 레퍼런스를 저장하는 변수를 생성하려면 다음 단계를 따릅니다.
변수 섹션에서
OtherActor라는 새 변수를 추가합니다.타입을 액터 > 오브젝트 레퍼런스로 변경합니다.
디테일 패널에서 컨테이너 타입(Container Type)을 단일(Single)로 변경합니다. 이 키와 상호작용하는 액터는 플레이어 하나만 참조하면 되기 때문입니다.
키의 변수는 이제 다음과 같습니다.
키 테스트
키를 테스트하고 지금까지의 모습을 확인합니다.
레벨로 돌아가 콘텐츠 브라우저에서 BP_Key를 레벨로 드래그합니다. 게임에 인스턴스를 추가할 수 있는 블루프린트를 만들어졌습니다! 하지만 여전히 회색입니다.
키를 선택한 상태로 디테일 패널로 이동합니다. 생성한 Setup 카테고리에서 키 타입 프로퍼티를 찾습니다. 파란색에서 노란색, 빨간색으로 변경할 수 있지만, 회색 타원 키는 아직 변경되지 않습니다.
이는 키에 컴포넌트와 데이터를 추가했지만 해당 부분이 아직 서로 통신하지 않기 때문입니다. 바로 이 시점에서 블루프린트 비주얼 스크립팅이 필요합니다. 블루프린트 관련 정보를 전달하고 해당 정보로 액션을 수행하는 로직(노드 및 와이어)을 빌드하는 것을 말합니다.
블루프린트 함수로 키 값 설정
다음으로, KeyMap 옵션을 KeyMesh 컴포넌트에 연결하는 함수를 생성하여 타입에 따라 키의 올바른 메시 셰이프와 머티리얼 컬러를 자동으로 설정해 봅니다.
함수는 특정 작업을 수행하는 재사용 가능한 블루프린트 노드 세트입니다. 노드 그래프를 정리하는 데 도움이 되며, 동일한 로직을 다시 생성하지 않고도 여러 번 실행(또는 '호출')할 수 있습니다. 이 튜토리얼 시리즈의 다음 파트에서 함수에 대해 자세히 살펴보겠습니다.
키 블루프린트에서 함수를 생성하는 대신 재사용 가능한 함수 컬렉션을 저장하는 블루프린트 에셋 유형인 새 블루프린트 함수 라이브러리(Blueprint Function Library)에 함수를 넣습니다. 이러한 함수는 특정 블루프린트나 액터에 연결되어 있지 않습니다. 대신 전체 프로젝트에서 전역적으로 액세스할 수 있습니다. 라이브러리는 유용한 함수를 한곳에 보관하므로 여러 블루프린트에 복사하여 붙여넣을 필요가 없습니다.
새 함수로 블루프린트 함수 라이브러리를 생성하려면 다음 단계를 따릅니다.
콘텐츠 브라우저에서 콘텐츠 > AdventureGame > Designer > Core로 이동합니다.
Core 폴더를 우클릭하고 블루프린트로 이동하여 블루프린트 함수 라이브러리를 선택합니다. 새 에셋을
BPL_FPGame으로 명명하고 엽니다.내 블루프린트 패널의 함수(Functions) 섹션에서 하이라이트된 새 함수 하나로 시작하고,
fnBPLSetKey로 명명합니다.이 튜토리얼의 샘플 프로젝트에서는 블루프린트 라이브러리의 함수에
BPL라벨을 사용하고 함수에fn접두사를 사용합니다. 이렇게 하면 SetKey가 무엇인지, 어디에서 왔는지 식별하는 데 도움이 되며, 노드 액션 목록에서 함수를 손쉽게 찾을 수 있습니다.
다음으로, 필요한 입력과 출력으로 함수를 구성합니다.
입력(Inputs)은 작업을 수행할 수 있도록 함수에 전달하는 값으로, 변수와 비슷한 역할을 합니다. fnBPLSetKey 함수는 KeyType, KeyMap, KeyMesh 간에 액션을 수행해야 하므로 입력이어야 합니다.
출력(Outputs)은 보통 결과를 생성한 후 함수가 블루프린트로 다시 전달하는 정보입니다. fnBPLSetKey 함수에는 출력이 필요하지 않습니다.
fnBPLSetKey 함수에 입력을 추가하려면 다음 단계를 따릅니다.
fnBPLSetKey 함수를 클릭하여 선택합니다. 디테일 패널의 입력 카테고리 옆에 있는 더하기 버튼을 클릭하여 새 입력을 생성합니다.
변수와 마찬가지로 각 입력에는 이름, 변수 핀 타입, 컨테이너 타입이 있습니다.
입력의 이름을
Static Mesh Array로 변경합니다.타입을 스태틱 메시 컴포넌트(Static Mesh Component) > 오브젝트 레퍼런스로 변경합니다. 함수의 노드 그래프에서 보라색 함수 엔트리 노드에 생성한 입력이 있는 핀이 있고 핀의 스타일이 타입(스태틱 메시 배열)을 반영하는 것을 확인할 수 있습니다.
타입 옆의 컨테이너 타입 드롭다운을 클릭하고 배열(Array)을 선택합니다.
배열은 단일 컨테이너에 동일한 타입의 여러 값을 저장하는 변수입니다. 각 값은 배열 엘리먼트로 저장됩니다.
키의 KeyMap 프로퍼티와 일치하도록 다른 입력을 구성합니다.
다른 입력을 추가하고
KeyMap으로 명명합니다.핀 타입(Pin Type) 드롭다운을 클릭하고 Enum Key Type으로 설정합니다.
컨테이너 타입 드롭다운을 클릭하고 맵(Map)을 선택합니다.
값 타입(Value Type) 드롭다운을 클릭하고 타입을 Struct Key Data로 설정합니다.
키 타입 입력을 다음과 같이 구성합니다.
Key라는 이름의 입력을 하나 더 추가합니다.컨테이너(Container)는 단일(Single)로 설정하고 타입은 Enum Key Type으로 유지합니다.
세 개의 입력은 다음과 같습니다.
이제 함수의 노드를 빌드할 수 있습니다. 그래프 패널에서 방금 생성한 Static Mesh Array, Key Map, Key 입력과 함께 함수 엔트리 노드 fnBPLSetKey를 볼 수 있습니다.
블루프린트 그래프 탐색:
패닝: 우클릭하고 드래그합니다.
줌: 마우스 휠을 사용합니다.
새 키 메시 셰이프로 키를 구성하는 함수에 로직을 추가하려면 다음 단계를 따릅니다.
이 노드의 트라이앵글 실행(exec) 핀에서 드래그하여 For Each Loop를 검색한 다음 노드 액션 목록에서 선택합니다. 그러면 fnBPLSetKey 노드에 연결된 새 노드가 생성됩니다.
For Each Loop 노드를 사용하면 배열의 각 항목에 몇 가지 액션을 수행할 수 있습니다. 루프 바디 실행 핀에 연결하는 로직은 배열 엘리먼트당 한 번 실행됩니다. 루프가 완료되면 Completed 핀을 통해 실행이 계속됩니다.
fnBPLSetKey 노드의 Static Mesh Array 핀을 드래그하여 For Each Loop의 Array 핀에 연결합니다.
키에는 메시가 하나만 있지만 fnBPLSetKey는 스태틱 메시 배열을 사용하므로 다양한 레벨 오브젝트와 함께 사용할 수 있습니다. 예를 들어 이 튜토리얼 시리즈의 다음 파트에서는 오른쪽 문과 왼쪽 문에 대한 두 개의 스태틱 메시가 있는 문 블루프린트로 작업합니다.
다음으로 fnBPLSetKey 노드의 Key Map 핀을 드래그하여 Find 노드를 검색하여 선택합니다. 이 노드는 키 타입을 받아 KeyMap에서 해당하는 메시와 머티리얼을 가져올 수 있습니다.
Find 노드의 파란색 출력 핀을 우클릭하고 구조체 핀 분할(Split Struct Pin)을 클릭합니다.
이렇게 하면 출력이
Struct_KeyData의 두 변수인 Key Material과 Key Mesh로 분할됩니다.fnBPLSetKey 노드의 Key 핀을 Find 노드의 청록색 Key 핀에 연결합니다.
이제 For Each Loop 노드의 Loop Body 핀에서 드래그하여 구조체(Struct) 카테고리에서 Is Valid를 검색합니다. 옆에 물음표 아이콘(?)이 있는 Is Valid 노드를 추가합니다. 이 노드는 구조체 값에 사용하기 때문입니다.
이 노드는 유효한 메시 셰이프가 함수로 전달되었는지 확인합니다. 전달된 경우, 오브젝트의 스태틱 메시와 머티리얼을 모두 설정합니다. 그렇지 않은 경우, 머티리얼만 설정합니다.
Find 노드의 Key Mesh 핀을 Is Valid 노드의 Input Object 핀에 연결합니다.
Is Valid 노드에서 Is Valid 핀을 드래그하여 컨텍스트 구분(Context Sensitive) 옵션을 false로 토글합니다.
Set Static Mesh 노드를 검색하여 추가합니다.
For Each Loop 노드에서 Array Element 핀을 드래그하여 Set Static Mesh 노드의 Target 핀에 연결합니다.
Target은 노드가 작동할 엔티티입니다. KeyMesh에서 Set Static Mesh 액션을 실행해야 하므로 Static Mesh Array 배열이 타깃이 되어야 합니다.
Find 노드에서 Key Mesh 핀을 드래그하여 Set Static Mesh 노드의 New Mesh 핀에 연결합니다.
함수의 그래프는 이제 다음과 같습니다.
키에 새 메시 셰이프를 설정했으니 이제 새 머티리얼도 설정하기만 하면 됩니다.
새로운 키 머티리얼 컬러로 키를 구성하는 로직을 추가하려면 다음 단계를 따릅니다.
Set Static Mesh 노드의 Exec 핀을 드래그하여 렌더링(Rendering) > 머티리얼(Material) 카테고리에서 Set Material 노드를 찾아 생성합니다.
Target 핀을 For Each Loop 노드의 Array Element로 드래그합니다.
Material 핀을 Find 노드의 Key Material 핀으로 드래그합니다.
메시가 제공되지 않을 때 머티리얼이 설정되도록 하려면 노드의 Is Not Valid 핀을 Set Material 노드의 실행 핀에 연결합니다. 두 개의 커넥터를 추가하여 와이어의 셰이프를 변경합니다.
블루프린트를 저장하고 컴파일(Compile)합니다.
완전한 fnBPLSetKey 함수는 이제 다음과 같습니다.
이 노드 그룹을 프로젝트에 복사하려면 전체 스니펫 복사하기를 클릭하고 블루프린트에서 해당하는 그래프의 빈 영역을 클릭한 다음 Ctrl + V를 누릅니다. 그런 다음 함수 엔트리 노드의 핀을 For Each Loop 및 Find 노드에 연결합니다.
키 초기화
이제 키 블루프린트 내부에서 만든 함수 기능을 사용할 준비가 되었습니다. 먼저, 할당한 KeyType 에 따라 키를 초기화합니다.
블루프린트 레벨 오브젝트를 초기화한다는 것은 뷰포트에서 또는 게임이 시작될 때 생성 시 이를 구성한다는 뜻입니다.
키를 초기화하려면 다음 단계를 따릅니다.
Construction Script 노드의 실행 핀을 드래그하여 앞서 생성한 fnBPLSetKey 함수를 검색합니다.
함수 노드에는
BP_Key에서 제공할 Static Mesh Array, Key Map, Key가 필요합니다.내 블루프린트 패널의 변수(Variables) 섹션에서 Setup 카테고리를 펼치고 KeyType 변수를 함수 노드 근처의 노드 그래프로 드래그합니다.
그러면 변수의 값을 Get 또는 Set 할지 묻는 메시지가 표시됩니다. 이 경우 키 타입을 확인해야 하므로 Get을 선택합니다.
새 Get Key Type 노드의 핀을 Fn BPLSet Key 노드의 Key 핀에 연결합니다.
KeyMap 변수에 대해서도 동일한 프로세스를 반복합니다. 노드 그래프로 드래그하여 Get 노드를 생성합니다. 이 노드의 핀을 Fn BPLSet Key 노드의 KeyMap 핀에 연결합니다.
다음으로 컴포넌트 패널에서 KeyMesh를 그래프로 드래그하고 Get 노드를 생성합니다.
Key Mesh 노드에는 단일 스태틱 메시 컴포넌트 레퍼런스가 포함되어 있지만, 함수 노드에는 배열이 필요합니다. Key Mesh 핀을 Fn BPLSet Key 노드의 Static Mesh Array 핀에 연결하면 언리얼 엔진이 알아서 처리해 줍니다.
블루프린트를 저장하고 컴파일합니다.
키의 생성 스크립트는 이제 다음과 같습니다.
이 스니펫을 프로젝트에 복사하는 경우 FnBPLSetKey 노드를 Construction Script 노드에 연결해야 합니다.
키의 함수 기능 테스트
이제 키와 새 함수에서 생성한, 컬러가 변하는 함수 기능을 테스트할 수 있습니다.
블루프린트 에디터 창을 닫고 레벨 에디터로 돌아갑니다.
디폴트 키 타입 값은 파란색이므로 키는 파란색 사각형으로 초기화됩니다.
키 액터를 선택하고 디테일 패널의 Setup 섹션에서 키 타입을 노란색과 빨간색으로 변경합니다. 키를 변경하면 레벨에서 키의 컬러와 셰이프가 업데이트됩니다!
플레이어 캐릭터에 키 부여
플레이어는 키를 주울 방법이 필요하여, 다른 오브젝트는 플레이어가 어떤 키를 가지고 있는지 알아야 합니다. 키 부여 및 획득을 처리하기 위해 블루프린트 인터페이스를 사용합니다.
블루프린트 인터페이스를 사용한 블루프린트 간 통신
블루프린트 인터페이스는 인터페이스에 대한 액세스 권한이 있는 각 블루프린트가 사용할 수 있는 함수 목록을 저장합니다. 인터페이스를 구현한다는 것은 블루프린트가 공유된 이벤트(또는 메시지) 세트에 응답할 수 있는 기능을 제공한다는 의미입니다.
플레이어와 NPC 캐릭터가 걸어 다니는 게임에서 키가 플레이어 캐릭터와만 상호작용하도록 하는 방법이 필요합니다. 이를 위해 BP_AdventureCharacter에서 구현할 블루프린트 인터페이스를 생성합니다. 이는 플레이어 블루프린트가 키 줍기 메시지를 수신하기 위해 사용하는 권한 슬립과 같은 역할을 합니다.
블루프린트 인터페이스는 여러 블루프린트가 서로의 디테일을 모른 채 통신하도록 할 때 유용합니다.
두 개의 함수가 있는 블루프린트 인터페이스를 생성하려면 다음 단계를 따릅니다.
콘텐츠 브라우저에서 콘텐츠 > AdventureGame > Designer > Blueprints > Core로 이동합니다.
Core 폴더를 우클릭하고 블루프린트로 이동하여 새 블루프린트 인터페이스를 생성합니다. 이 에셋을
BPI_PlayerKeys로 명명하고 더블클릭하여 엽니다.이 창은 블루프린트 에디터와 비슷하게 생겼습니다. 우측에는 이 인터페이스의 모든 함수가 나열된 내 블루프린트 패널이 있습니다. 그 아래에는 디테일 패널이 있습니다.
내 블루프린트 패널에 이미 생성된 초기 함수가 있으며, 이를
fnBPIAddKey로 명명합니다.함수를 선택하고 디테일 패널의 입력 섹션에서 더하기 버튼을 눌러 새 입력을 추가합니다.
입력을
KeyType으로 명명하고 타입을 Enum Key Type으로 변경합니다.디테일 패널의 카테고리 옆에
Keys를 입력합니다. 이렇게 하면 블루프린트의 인터페이스 목록에서 함수를 손쉽게 찾을 수 있습니다.다음으로, 내 블루프린트 패널에 fnBPIGetKeys라는 이름의 새 함수를 추가합니다. 이 함수는 키 얻기를 처리합니다.
새 fnBPIGetKeys 함수를 선택하고 디테일 패널의 출력 섹션에서 더하기 버튼을 클릭하여 Held Keys라는 새 파라미터를 추가합니다.
플레이어가 찾은 키를 반환할 수 있도록 타입을 Enum Key Type으로 변경하고 값을 배열로 반환합니다.
인터페이스를 저장하고 컴파일합니다. 이제 BPI_PlayerKeys 창을 닫아도 됩니다.
인터페이스는 블루프린트 시스템과 관련이 있으므로 블루프린트와 마찬가지로 컴파일해야 합니다.
블루프린트 인터페이스에서는 함수 선언만 생성했습니다. 인터페이스 함수에는 로직 자체가 포함되어 있지 않지만, 그 구성에 따라 블루프린트에서 사용하는 방법이 결정됩니다.
출력이 없는 인터페이스 함수(fnBPIAddKeys)는 이벤트처럼 작동하는 반면, 출력이 있는 함수(fnBPIGetKeys)는 로직을 추가할 수 있는 일반 함수처럼 작동합니다.
새 플레이어 캐릭터 생성
캐릭터에 추가하기 전에 프로젝트와 함께 제공되는 디폴트 플레이어 캐릭터를 복제하여 고유한 베리언트를 생성합니다. 또한 새 캐릭터를 사용하려면 게임 모드 세팅을 변경해야 합니다.
프로젝트에서 사용할 플레이어 캐릭터를 생성하려면 다음 단계를 따릅니다.
콘텐츠 브라우저에서 콘텐츠 > AdventureGame > Designer > Blueprints 폴더로 이동합니다.
Characters라는 새 폴더를 생성합니다.콘텐츠 > Variant_Shooter > Blueprints > FirstPerson 폴더로 이동합니다.
BP_ShooterChracter에셋을 생성한 Characters 폴더로 드래그하고 여기에 복사(Copy Here)를 선택합니다.Characters 폴더에서 새 사본을 우클릭하고
BP_AdventureCharacter로 이름을 변경합니다.편집(Edit) > 프로젝트 세팅(Project Settings)으로 이동합니다. 왼쪽 패널에서 프로젝트(Project) > 맵 & 모드 세팅(Maps & Modes) 세팅으로 이동합니다.
DefaultGameMode 세팅에서 SelectedGameMode를 펼칩니다.
디폴트 플레이어 캐릭터를 포함하여 월드에 대한 규칙 세트를 정의하는 게임 모드(Game Mode) 에셋입니다. 생성한 새 캐릭터를 사용하려면 변경해야 합니다. 여기에서 게임 모드 세팅을 변경하거나 에셋 자체를 열 수 있습니다.
디폴트 폰 클래스(Default Pawn Class)를
BP_AdventureCharacter로 변경합니다.프로젝트 세팅 창을 닫습니다.
플레이어에 블루프린트 인터페이스 추가
이 섹션에서는 플레이어 캐릭터 블루프린트를 수정해 보겠습니다. 이 캐릭터에는 유용한 함수와 인터페이스가 이미 많이 구성되어 있으며, 앞서 만든 BPI_PlayerKeys 인터페이스를 추가하여 키를 선택할 수 있게 합니다.
다음으로, 키를 사용하도록 새 BP_AdventureCharacter를 수정합니다.
블루프린트 인터페이스 함수를 캐릭터에 추가하려면 다음 단계를 따릅니다.
새 Characters 폴더로 이동하여
BP_AdventureCharacter를 엽니다.플레이어 블루프린트가 이를 구현하도록 BPI Player Keys 인터페이스를 추가합니다. 새 창 상단의 툴바에서 클래스 세팅(Class Settings) 버튼을 클릭합니다.
우측 디테일 패널의 인터페이스(Interfaces) > 구현된 인터페이스(Implemented Interfaces) 섹션에서 추가(Add)를 클릭한 다음, 드롭다운에서
BPI_PlayerKeys를 선택합니다. 이렇게 하면 캐릭터가 fnBPIGetKeys 및 fnBPIAddKey 함수를 구현할 수 있습니다.인터페이스 함수를 사용할 수 있도록 블루프린트를 컴파일합니다. 내 블루프린트 패널의 인터페이스 섹션에 fnBPIAddKey 및 fnBPIGetKey가 포함된 Keys 카테고리가 있습니다. 회색 대신 노란색 아이콘이 있는데, 이는 이러한 함수가 이벤트처럼 작동한다는 것을 의미합니다.
주운 키 저장
플레이어는 수집한 키를 저장해야 하므로 이를 위한 새 변수를 생성합니다. 변수는 최대 세 개의 키를 보유해야 하므로 배열이어야 합니다.
플레이어의 키를 저장할 배열 변수를 생성하려면 다음 단계를 따릅니다.
BP_AdventureCharacter블루프린트에서 내 블루프린트 패널의 변수 목록에 새 변수를 추가합니다.변수를
Held Keys로 명명합니다.변수를 선택하고 디테일 패널에서 컨테이너를 Enum Key Type 타입의 배열로 설정합니다. 플레이어가 여러 개의 키를 동시에 보유할 수 있으므로 배열을 사용하는 것이 중요합니다.
플레이어가 키를 주웠을 때 Held Keys 배열에 키를 추가하려면 다음 단계를 따릅니다.
캐릭터의 이벤트 그래프(Event Graph) 탭으로 이동합니다.
그래프를 우클릭하고 이벤트 fnBPIAddKey를 검색합니다. 이는 fnBPIAddKey 함수가 호출될 때 실행되는 이벤트 노드입니다.
실행 핀에서 드래그하여
Array Add를 검색하고 Add 노드를 선택합니다. 이 노드는 새 엘리먼트를 가져와 배열에 추가합니다.변수를 이벤트 그래프로 드래그하여 Held Keys 변수에 대한 레퍼런스를 추가한 다음, Get을 선택합니다.
Held Keys 노드를 Array Add 노드의 Target Array 입력에 연결합니다. 이 핀은 사각형처럼 보입니다.
이벤트 노드의 Key Type 핀을 Add 노드의 새 항목 입력에 연결합니다.
이제 이 이벤트 함수가 트리거되면 플레이어 캐릭터는 제공된 Key Type을 Held Keys에 추가합니다.
플레이어의 키 목록 얻기
이 튜토리얼의 다음 파트에서 작업할 문은 플레이어의 모든 키를 확인해야 하므로 플레이어가 주운 키 배열을 반환하는 함수 기능을 플레이어에게 추가합니다.
키 얻기를 처리하려면 다음 단계를 따릅니다.
BP_AdventureCharacter블루프린트의 내 블루프린트 > 인터페이스에서 Keys 섹션을 펼칩니다.목록에서 fnBPIGetKeys에는 회색 아이콘이 있어, 단순한 이벤트가 아닌 일반 함수로 사용할 수 있습니다.
fnBPIGetKeys를 더블클릭하여 함수의 그래프를 엽니다.
Held Keys 변수를 드래그하고 Get을 선택하여 레퍼런스를 추가합니다.
Get Held Keys 노드를 Return 노드의 Held Keys 핀에 연결합니다.
fnBPIGetKeys 그래프는 이제 다음과 같습니다.
플레이어와의 콜리전을 탐지하는 키 만들기
다음으로, 플레이어가 키를 주웠을 때 fnBPIGetKeys 이벤트 함수를 트리거하는 함수 기능을 추가합니다. 이 이벤트는 플레이어가 키의 콜리전 볼륨을 터치할 때 발생합니다.
Capsule 콜리전 컴포넌트에 속한 이벤트를 추가합니다. 이벤트는 게임플레이 중에 어떤 일이 일어나면 트리거됩니다. 이 경우 플레이어 액터가 키의 캡슐과 오버랩되면 키가 몇 가지 액션을 수행해야 합니다.
오버랩 이벤트를 추가하고 오버랩 액터가 플레이어인지 확인하려면 다음 단계를 따릅니다.
BP_Key블루프린트를 열고 EventGraph의 빈 영역으로 이동합니다.컴포넌트 패널에서 Capsule 컴포넌트를 우클릭하고 이벤트 추가(Add Event) > OnComponentBeginOverlap 추가(Add OnComponentBeginOverlap)를 선택합니다. 연관된 노드가 이벤트 그래프에 표시됩니다. 이 이벤트 노드는 이 액터와 다른 액터 간에 오버랩이 발생하면 트리거됩니다.
이벤트 노드는 해당 이벤트에 대한 정보와 함께 제공됩니다. 예를 들어 이벤트를 트리거한 오버랩 액터는 Other Actor 핀을 통해 전달됩니다.
변수 목록에서 OtherActor 변수를 그래프로 드래그하고 Set을 선택합니다. Set 노드는 해당 변수에 새 값을 저장합니다.
이벤트 OnComponentBeginOverlap 노드의 Exec 핀을 드래그하여 Set Other Actor 노드의 Exec 입력에 연결합니다.
이벤트 OnComponentBeginOverlap 노드의 Other Actor 핀을 드래그하여 Set Other Actor 노드의 Other Actor 입력에 연결합니다.
키로 어떤 작업을 하기 전에 오버랩되는 액터가 플레이어인지 확인합니다. 캐릭터만 키를 수집할 수 있기 때문입니다. 블루프린트 인터페이스가 있다면 플레이어라는 것을 알 수 있습니다.
Set 노드 근처를 우클릭하고 Does Object Implement Interface 노드를 추가합니다.
Does Object Implement Interface 노드에서 Interface 핀을 BPI_PlayerKeys로 변경합니다.
Test Object 입력 핀을 Set Other Actor 노드의 파란색 핀에 연결합니다. 이 핀은 Get Other Actor 노드처럼 작동합니다.
Does Object Implement Interface 노드에서 Return Value 핀을 드래그하여 Branch 노드를 추가합니다.
Branch 노드의 Exec 입력 핀을 Set 노드에 연결합니다.
Branch 노드는 조건이 true 또는 false인지 확인하여 각 결과에 대해 다른 액션을 실행할 수 있도록 합니다. 여기에서는 오버랩되는 액터가 플레이어인지 아닌지에 따라 true와 false라는 두 가지 시나리오에 대한 로직을 생성합니다.
플레이어가 키를 터치했을 때 키 추가 함수를 호출하려면 다음 단계를 따릅니다.
Branch 결과가 true인 경우 액터가 키를 선택할 수 있으므로 인터페이스의 이벤트 함수를 트리거합니다. Branch 노드의 True 핀에서 드래그하여 Fn BPIAdd Key (Message) 노드를 추가합니다.
블루프린트 인터페이스 함수를 호출할 때 메시지를 전송하는 것이기 때문에 정규 함수 노드 대신 메시지 노드를 추가하는 것입니다. Target 블루프린트는 해당 인터페이스를 구현하는 경우에만 반응합니다.
Fn BPIAdd Key 노드의 Target 핀을 드래그하여 Get Other Actor 노드를 추가합니다.
Key Type 핀을 드래그하여 Get Key Type 노드를 추가합니다. 이는 변수 레퍼런스를 추가하는 또 다른 방법입니다.
키를 주우면 잠시 후에 다시 키를 주울 수 없도록 사라져야 합니다. 이를 처리하려면 Fn BPIAdd Key 노드의 Exec 핀을 드래그하여 Delay 노드를 추가합니다. 기본 기간인
0.2를 유지합니다.타이머가 만료되면 키가 사라지므로 Destroy Actor 노드를 Delay 노드의 Completed 핀에 연결합니다. Target이 self로 설정되어 있는지 확인합니다. 즉, 키 액터가 레벨에서 자체적으로 제거되어야 합니다.
블루프린트를 저장하고 컴파일합니다.
Branch 노드의 False 결과에 노드가 추가되지 않은 것을 확인할 수 있습니다. 오버랩되는 액터에 키 인터페이스가 없으면 키를 주울 수 없으므로 아무 작업도 하지 않는 것입니다.
키의 완료 이벤트 그래프는 이제 다음과 같습니다.
최종 키 테스트
레벨로 돌아가서 각 컬러의 키를 추가합니다. 이제 게임 내에서 키 쪽으로 걸어가 키를 주울 수 있습니다.
콘텐츠 브라우저에서 바닥에 키를 드래그한 후 배치하려면 End를 누릅니다. 그러면 선택한 레벨 오브젝트가 바닥에 스냅됩니다.
다음 단계
다음 섹션에서는 플레이어가 해당 키를 줍지 않는 한 키처럼 컬러를 바꿀 수 있으며 닫힌 상태를 유지하도록 문 블루프린트를 변경해 봅니다.
키로 문 열기
문의 컬러가 바뀌고 일치하는 BP_Key로만 문이 열리도록 BP_DoorFrame 블루프린트를 환경설정합니다.