클러스터 이벤트 사용

nDisplay 클러스터에 이벤트를 전송하고, 블루프린트에서 그 이벤트에 반응하도록 하는 법을 설명합니다.

Windows
MacOS
Linux

클러스터 이벤트는 nDisplay 클러스터의 모든 노드가 이벤트에 동시 반응하도록 만들 수 있습니다.

  1. 클러스터 이벤트는 클러스터의 노드에서 아니면 외부 애플리케이션에서 마스터 노드로 전송하여 생성할 수 있습니다. 블루프린트에서 클러스터 이벤트 방출 또는 외부 애플리케이션에서 클러스터 이벤트 방출 부분을 확인하세요.
    nDisplay 클러스터를 가동하여 실행중인 경우, nDisplay Launcher 애플리케이션을 사용해도 클러스터 노드가 반응할 새로운 클러스터 이벤트를 전송할 수 있습니다. nDisplay Launcher에서 클러스터 이벤트 방출 부분을 참고하세요.

  2. 클러스터의 마스터 노드가 클러스터 이벤트를 받으면, 클러스터의 각 노드에 전파하여 똑같은 프레임에 각 노드에 이벤트가 발생하도록 합니다.

  3. 언리얼 엔진 애플리케이션의 블루프린트 또는 C++ 로직에서 리스너를 셋업하여 이러한 클러스터 이벤트를 감지하고 프로젝트에 필요한 게임플레이 로직에 응답할 수 있습니다. 블루프린트에서 클러스터 이벤트에 응답 부분을 참고하세요.

클러스터 이벤트 구조체

각 nDisplay 클러스터 이벤트에는 여러가지 프로퍼티가 포함됩니다.

세팅

유형

Name

string

Type

string

Category

string

Parameters

키-값 짝에 대한 옵션 매핑으로, 키와 값 둘 다 string 입니다.

프로젝트의 각 프로퍼티에서 보낼 데이터와 리스너가 데이터를 해석하는 방법을 결정하는 것은 사용자의 몫입니다.

블루프린트에서 클러스터 이벤트와 상호작용할 때, Make DisplayClusterClusterEventBreak DisplayClusterClusterEvent 노드를 사용하여 클러스터 이벤트를 구성 및 분해할 수 있습니다. 예:

A Cluster Event in Blueprint

C++ 에서, 또는 자신의 애플리케이션에서 클러스터 이벤트를 방출할 때, JSON 을 사용하여 같은 구조체를 표현하면 됩니다. 예를 들어, 위 클러스터 이벤트에 해당하는 JSON 은 다음과 같습니다.

{"Name":"activate","Type":"command","Category":"particles","Parameters":{"rate":"200","speed":"3"}}

블루프린트에서 클러스터 이벤트 방출

프로젝트의 블루프린트 클래스에서 클러스터 이벤트를 방출하려면:

  1. DisplayCluster Module API 를 가져와서 (nDisplay 개요 문서 참고) Cluster > Emits cluster event 함수를 호출합니다. 이 노드는 클러스터 이벤트를 마스터 노드로 보내고, 다시 클러스터의 모든 노드로 전파합니다.
    Emits cluster event

  2. 기본적으로 게임 플레이 로직에서 블루프린트 노드를 평가하는 언리얼 엔진 애플리케이션의 모든 인스턴스가 이 클러스터 이벤트를 발동합니다. 이 블루프린트 그래프가 클러스터의 여러 노드에서 평가되면 이벤트의 여러 사본이 발생할 수 있습니다.
    클러스터 이벤트의 여러 사본을 트리거하지 않으려면, Emits cluster event 노드에서 Master Only 부울 값을 설정하면 됩니다. 이 값이 true 설정되면, 마스터 노드만 이 Cluster Event 를 발동합니다. 다른 마스터 이외 클러스터 노드가 똑같은 블루프린트 그래프를 평가하는 경우, 그 노드는 이벤트를 방출하지 않습니다.
    Master Only

  3. Emits cluster event 노드의 Event 포트에서 왼쪽으로 드래그하고, Make DisplayClusterClusterEvent 를 선택합니다.
    Make DisplayClusterClusterEvent

  4. Make DisplayClusterClusterEvent 노드의 세팅을 사용해서 Cluster Event 의 Name, Type, Category 값을 설정합니다. 클러스터 이벤트와 함께 임의의 키-값 데이터를 전달해야 하는 경우, 그 키-값 맵을 Parameters 입력에 전달해도 됩니다.
    Creating and emitting a Cluster Event

  5. 블루프린트를 컴파일, 저장 합니다.

다음 번 프로젝트를 다시 패키지하고 nDisplay 클러스터를 실행할 때, 이 블루프린트 코드가 셋업한 클러스터 이벤트를 발동합니다. 블루프린트 코드 다른 데서 이 이벤트에 응답하도록 하려면, 블루프린트에서 클러스터 이벤트에 응답 부분을 참고하세요.

외부 애플리케이션에서 클러스터 이벤트 방출

nDisplay 클러스터를 시작하면, 마스터 노드가 특정 로컬 포트에서 들어오는 클러스터 이벤트 수신을 시작합니다. 네트워크의 다른 컴퓨터에서 실행중인 다른 애플리케이션에서 nDisplay 시스템에 새로운 클러스터를 방출하려면, 그 포트에 접속해서 메시지를 전송하면 됩니다.

방출하려는 각 클러스터 노드에 대해, 다음과 같은 규칙을 따라야 합니다.

  • 처음 두 바이트는 나머지 메시지의 전체 길이여야 합니다.

  • 메시지 나머지는 클러스터 이벤트의 내용이어야 하며, JSON 오브젝트로 표현합니다.

예를 들어, 이름이 "quit" 이고 유형이 "command" 인 커스텀 이벤트를 방출하는 방법은 다음과 같습니다.

  1. 클러스터 노드에 대한 값이 들어있는 JSON 스트링을 구성합니다. 이 경우:

    {"Name":"quit","Type":"command","Category":"","Parameters":{}}

    Name, Type, Category 필드는 필수이지만, Parameters 필드는 생략할 수 있습니다.

  2. JSON 스트링 길이를 가져와서 (이 경우 62자) 그 길이를 nDisplay 마스터 노드로 전송합니다.

  3. JSON 스트링 자체를 nDisplay 마스터 노드로 전송합니다.

마스터 노드가 메시지를 수신하여 처리할 수 있는 경우, 같은 규칙에 따라 애플리케이션에 응답을 다시 전송합니다.

  • 처음 두 바이트는 나머지 응답 메시지의 바이트 길이입니다.

  • 나머지 메시지는 JSON 오브젝트로 보통 Error 필드가 하나 들어있습니다. 이 필드 값은 메시지 처리가 잘 되었는지 나타내는 오류 코드입니다.

    코드

    의미

    0

    오류가 발생하지 않았습니다. 메시지 처리에 성공했습니다.

    2

    전송한 클러스터 이벤트에 필수 필드 하나 이상이 누락되었습니다. 값이 비어 있더라도 Name, Category, Type 필드가 있는지 확인하세요.

    255

    인식할 수 없는 오류가 발생했습니다.

기본적으로 마스터 노드는 14003 번 포트에 클러스터 이벤트를 수신 대기합니다. 이 기본값은 nDisplay 구성 파일에서 변경할 수 있습니다. nDisplay 통신 포트 변경 문서를 참고하세요.

프로젝트의 블루프린트 코드에서 이 클러스터 이벤트에 응답하려면, 블루프린트에서 클러스터 이벤트에 응답 부분을 참고하세요.

nDisplay Launcher 에서 클러스터 이벤트 방출

nDisplay 클러스터 실행 도중, nDisplayLauncher 애플리케이션을 사용하여 언제든 마스터 노드에 클러스터 이벤트를 전송할 수 있습니다.

  1. 평소처럼 nDisplay 클러스터를 시작합니다.

  2. Cluster events (클러스터 이벤트) 탭으로 전환합니다. 이 탭에서 클러스터 이벤트를 셋업하고 필요할 때 클러스터로 보냅니다.

  3. New (신규) 버튼을 클릭하여 이 탭의 목록에 새 클러스터 이벤트를 추가합니다.
    Cluster events tab

  4. Cluster event editor (클러스터 이벤트 에디터) 창에서 클러스터 이벤트에 대한 Name, Type, Category 값을 셋업합니다.
    Settings in the Cluster event editor

  5. 클러스터 이벤트의 목록 또는 파라미터에 키-값 짝을 추가할 수도 있습니다. Argument 필드에 키를, Value 필드에 값을 설정하고 + 버튼을 클릭합니다.
    Parameters in the Cluster event editor

    파라미터를 생성한 뒤 수정하려면, 오른쪽 목록에서 선택하고 - 를 클릭하여 지웁니다. 그런 다음 새 파라미터를 다시 만들어 설정합니다.

  6. Apply (적용)을 클릭하여 새 클러트러 이벤트를 저장합니다.

  7. 클러스터 이벤트 탭으로 돌아와, 목록의 클러스터 이벤트를 선택하고 Send (전송)을 클릭합니다.
    Send the Cluster Event

    Modify (수정)을 클릭해서 선택한 클러스터 이벤트를 다시 열고 값을 편집할 수 있습니다.

  8. 마스터 노드의 응답을 보려면 nDisplayLauncher 하단 로그 출력 패널을 확인하세요.
    clusterevent-emit-launcher-response.png

프로젝트의 블루프린트 코드에서 이 클러스터 이벤트에 응답하려면, 블루프린트에서 클러스터 이벤트에 응답 부분을 참고하세요.

블루프린트에서 클러스터 이벤트에 응답

위에서 설명한 방법 중 하나를 설정하여 클러스터 이벤트를 nDisplay 네트워크에 전송하면 블루프린트 (또는 C ++) 게임 플레이 로직을 만들어 해당 클러스터 이벤트를 감지하고 어떤 방식으로든 응답할 수 있습니다. 그 방법은 DisplayClusterClusterEventListener 인터페이스 구현 클래스인 리스너를 만들고 등록해야합니다. 리스너를 등록하려면 Add Cluster Event Listener 함수를 nDisplay API에서 호출한 다음 Event on Cluster Event 노드를 사용하면 클러스터 이벤트를 감지하고 응답할 수 있습니다.

예를 들어, 새로운 블루프린트 클래스를 생성하여 리스너로 등록하는 방법은 다음과 같습니다.

  1. 콘텐츠 브라우저 에서 우클릭하고 기본 애셋 생성 > 블루프린트 클래스 를 선택합니다.
    Create Blueprint Class

  2. 부모 클래스로 Actor 를 선택합니다.
    Actor

  3. 콘텐츠 브라우저 에 새 리스너 클래스의 이름을 입력합니다.
    Rename the class

  4. 클래스를 끌어 레벨 뷰보트에 놓습니다.
    Drag and drop the Blueprint into the Level

  5. 새 블루프린트 클래스를 더블클릭하여 편집합니다.

  6. 툴바에서 클래스 세팅 을 클릭합니다.
    Class Settings

  7. 디테일 패널에서 Interfaces > Implemented Interfaces 세팅을 찾아 Add (추가)를 클릭합니다.
    Add interface

  8. 목록에서 DisplayClusterClusterEventListener 인터페이스를 찾아 선택합니다.
    DisplayClusterClusterEventListener

  9. 툴바의 컴파일 버튼을 클릭하여 클래스를 컴파일합니다.

  10. 컨스트럭션 스크립트 탭에서 그래프를 다음과 같이 만들어 리스너를 등록합니다.

    셋업 방법은 다음과 같습니다.

    1. 컨스트럭션 스크립트 노드의 출력을 오른쪽으로 드래그하여 N Display > Get DisplayCluster Module API 를 선택합니다.

    2. 그 노드의 Out API 포트를 오른쪽으로 드래그하고 Display Cluster > Cluster > Add cluster event listener 를 선택합니다.

    3. 마지막으로 Add cluster event listener 노드의 Listener 포트를 왼쪽으로 드래그하고, Variables > Get a reference to self 를 선택합니다.

  11. 이벤트 그래프 탭으로 전환하고, Add Event > N Display > Event On Cluster Event 노드를 추가합니다. nDisplay 클러스터에서 클러스터 이벤트가 발생할 때마다, 이 이벤트가 트리거됩니다.
    이 이벤트에 할당된 세팅 및 파라미터를 읽고, 이를 사용하여 블루프린트에서 취해야 할 조치를 결정할 수 있습니다. 그 방법은 On Cluster Event 노드의 Event 포드를 오른쪽으로 드래그하고 Break DisplayClusterClusterEvent 를 선택합니다.
    예를 들어, 이 그래프는 단순히 각 클러스터 이벤트의 Name 값을 화면에 인쇄합니다.

  12. 블루프린트 클래스를 컴파일, 저장 합니다.

다음 번 클러스터에서 클러스터 이벤트가 방출될 때, 그 클러스터 이벤트의 이름이 화면에 인쇄됩니다.

Select Skin
Light
Dark

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

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

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

네이버 카페
공식 포럼