블루프린트 인터페이스 구현하기

블루프린트 인터페이스는, 블루프린트에서 유형이 다른 타깃 블루프린트의 함수도, 같은 인터페이스를 구현하기만 한다면 호출할 수 있도록 해 줍니다.

Windows
MacOS
Linux

블루프린트에서 인터페이스 사용하기

블루프린트 인터페이스 를 사용하면 공통된 방법으로 특정 함수성을 모두 공유하는 다수의 상이한 오브젝트 유형과의 상호작용이 가능합니다. 즉 차량이나 나무처럼 완전히 다른 유형의 오브젝트일지라도, 둘 다 무기로 공격하여 대미지를 입힐 수 있다는 한가지 속성의 공유가 가능합니다. OnTakeWeaponFire 함수를 포함하는 블루프린트 인터페이스 를 만들고, 차량과 나무 둘 다에 그 블루프린트 인터페이스 를 구현함으로써 차량이든 나무든 같은 유형으로 간주하여 그 어느 것을 무기로 공격했든 OnTakeWeaponFire 함수를 호출하기만 하면 되는 것입니다.

인터페이스 추가하기

블루프린트 인터페이스 는 물론 네이티브 (C++) 코드로 정의된 인터페이스레벨 블루프린트 이외 어떤 유형의 블루프린트 에도 추가 가능합니다.

  1. 메인 레벨 에디터 창에서, 프로젝트 내 레벨 블루프린트 를 엽니다.

    OpenLevelBP.png

  2. 상단의 툴바 에서 클래스 세팅 버튼을 클릭합니다.

    ClassSettings.png

  3. 오른편의 디테일 패널에서 Interface 카테고리를 찾습니다.

  4. 인터페이스 추가 버튼을 클릭하여 나오는 사용가능 인터페이스 목록에서 사용할 인터페이스를 선택합니다.

    InterfacesCategory.png

    InterfacesListPopulated.png

Implemented Interfaces (구현된 인터페이스) 목록에 있는 인터페이스 옆 button_X_Remove.png 버튼을 클릭해서 제거할 수도 있습니다. 블루프린트 인터페이스를 일반 블루프린트 함수로 이주시킬 수도 있습니다. 자세한 정보는 블루프린트 인터페이스 이주 문서를 참고하시기 바랍니다.

Interfaces 카테고리 내 Inherited Interfaces (상속된 인터페이스) 섹션은 이 오브젝트에 의해 상속된 인터페이스로 (예: 현재 블루프린트가 파생된 블루프린트에 구현된 것들로) 자동 채워집니다.

인터페이스 멤버 구현하기

인터페이스블루프린트 에 추가될 때, 그 블루프린트 는 반드시 인터페이스 의 함수를 구현 해야 호출되었을 때 어떠한 동작을 하도록 할 수 있습니다. 이 작업은 이벤트 그래프인터페이스 함수에 대한 Event 노드를 배치하는 것으로 이루어집니다. Event 에 연결된 노드가 함수에 대한 함수성, 또는 구현을 정의합니다.

  1. 블루프린트이벤트 그래프 에 우클릭한 다음 Add Event > Event ... 를 선택합니다.

    Implement Interface - Add Event Implement Interface - Event Node

    추가하고자 하는 이벤트 유형을 선택하면 그 이벤트가 그래프에 추가됩니다.

  2. Event 실행 핀에 연결되는 노드 망을 만들어 함수성을 줍니다.

    Implement Interface - Event Implementation

인터페이스 함수 호출하기

인터페이스 의 함수는 Interface Message (인터페이스 메시지) 노드를 사용하여 실행합니다. 이 노드는 함수 호출 와 비슷한데, 타깃이 인터페이스 구현을 하지 않는 경우 조용히 실패한다는 점만 다릅니다.

Implement Interface - Call Function

다른 블루프린트에서 인터페이스 함수 호출하기

인터페이스는 각기 다른 블루프린트간의 통신에 좋습니다. 어느 한 인터페이스의 함수를 다른 블루프린트에서도 호출할 수 있습니다. 이는 두 가지 조건이 충족되는 경우 가능합니다:

  • 두 블루프린트 모두 필요한 함수와 같은 인터페이스를 구현하는 경우.

  • 호출하는 블루프린트에서 다른 블루프린트의 게임내 인스턴스 이름을 알고 있는 경우.

이벤트 그래프에 Interface Function 노드 생성시, 컨텍스트 메뉴에 두 가지 버전의 함수가 뜨는 것을 종종 보게 됩니다.

MyFunctionInMenu.png

여기서 중요한 점은, Call Function 아래 있는 버전은 로컬 버전으로, 이 블루프린트 안에서만 호출하기 위한 용도입니다.

Interface Messages 아래 있는 버전은 같은 인터페이스를 구현하는 다른 블루프린트에서 인터페이스를 통해 호출하기 위한 용도입니다.

노드 제목줄 아래 구분을 돕기 위한 라벨이 있습니다:

Local_MyFunction.png

Interface_MyFunction.png

로컬 버전.

인터페이스 메시지 버전.

Interface Message Function 을 호출하려면 함수를 호출하려는 적합한 블루프린트 인스턴스를 제공해 줘야 합니다.

이 그림에서 보면 Target 입력으로 다른 블루프린트에 보내고 있습니다. 그러면 제공된 블루프린트에서 그 함수를 호출하게 됩니다. 그 블루프린트가 같은 인터페이스를 구현하지 않은 경우, 아무일도 벌어지지 않습니다.

InterfaceMessageFunctionCalled.png

레벨 안에 존재하는 블루프린트를 지정하기 위해서는, 'Actor' 유형 퍼블릭 변수를 만든 다음, 레벨 에디터의 디테일 탭에서 해당 변수의 값에 적합한 블루프린트를 할당해 주는 것이 최선입니다.

레벨 블루프린트에서 인터페이스 함수 호출

인터페이스는 Get Streaming Level 노드를 사용해서 서브레벨 사이의 통신 역시도 가능합니다. 레벨이 로드되어 유효 상태가 되면, 인터페이스 메시지 는 레벨의 블루프린트 스크립트를 타깃으로 하여 함수를 호출합니다.

InterfaceGetLevelStreaming.png

인터페이스 함수 덮어쓰기

인터페이스 함수의 매우 중요한 면 한 가지는, 자체적으로 구현이 없기 때문에, 인터페이스를 구현하는 각각의 블루프린트마다 독립적인 함수성을 정의할 수 있다는 점입니다.

인터페이스가 블루프린트에 구현된 이후에는, 해당 인터페이스의 함수가 내 블루프린트 패널에 보이게 됩니다.

iFunctionInExplorer.png

그 함수를 더블클릭하면, 블루프린트 에디터 안에서 열립니다. 여기에는 이 함수에 대한 로컬 구현이 표시됩니다. 여기에 정의된 함수성은 무엇이든 이 블루프린트에 고유한 것이 됩니다. 이런 식으로 인터페이스를 구현하는 각 블루프린트에 대해 별도의 함수성을 정의할 수 있습니다.

예를 들어 이 그림에서, 기본적인 인터페이스 함수가 블루프린트 안에 열린 것을 볼 수 있습니다. 지금 상태로 함수는 아무 것도 하지 않습니다.

DefaultFunction.png

약간의 비교 이후 값을 출력하는 간단한 망을 만들어 봅시다.

ComparisonFunction.png

이제 로컬에서 함수가 호출되면, 플로트 값을 받아 숫자 10 과 비교한 다음 화면에 부울 결과값을 출력합니다.

FunctionLogging.png

태그
Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼