퀵스타트 가이드에 설명된 것과 같이 픽셀 스트리밍 시스템을 구성한 경우에는 언리얼 엔진 애플리케이션의 게임플레이 코드에서 런타임에 시스템을 관리하기 위해 필요한 특별한 작업을 수행할 필요가 없습니다. 하지만 픽셀 스트리밍 플러그인은 특정 이펙트를 얻기 위해 픽셀 스트리밍 시스템을 제어하고 인터랙션할 수 있는 몇 가지 선택적인 방법을 제공합니다. 이 페이지에서는 이러한 추가 옵션에 대해 설명합니다.
프레임 프리즈
언리얼 엔진 애플리케이션에서 렌더링되는 모든 프레임을 미디어 스트림에 인코딩할 경우 언리얼 엔진을 실행 중인 컴퓨터의 리소스를 차지하고, 이러한 프레임을 네트워크에 전송하기 위해 대역폭을 소비하고, 사용 가능한 대역폭에 따라 인코딩으로 인해 렌더링된 이미지의 퀄리티가 저하되는 문제가 있습니다.
GPU 리소스 및 네트워크 대역폭 사용을 최소화하기 위해 일부 경우에는 모든 프레임을 인코딩 및 전송하지 않도록 일시적으로 픽셀 스트리밍 플러그인을 비활성화하고 대신 연결된 클라이언트에 단일 스태틱 이미지를 표시해야 할 수 있습니다. 예를 들면 다음과 같습니다.
-
클라이언트가 현재 애플리케이션과 인터랙션 중이 아니고 버추얼 월드의 아무것도 이동 중이 아닌 경우 변경사항이 있을 때까지 애플리케이션을 마지막 렌더링된 프레임으로 고정해야 할 수 있습니다.
-
로딩 화면 또는 메시지 캡션과 같은 임의의 이미지를 클라이언트에 표시해야 할 수 있습니다.
이를 위해 픽셀 스트리밍 플러그인은 인코딩을 일시정지 및 재개하는 데 사용할 수 있는 블루프린트 노드를 제공합니다. 이 노드는 '블루프린트 에디터(Blueprint Editor)'의 픽셀 스트리밍 프레임 프리즈(Pixel Streaming Freeze Frame) 카테고리에서 찾을 수 있습니다.
-
미디어 스트림을 스태틱 이미지로 바꿔야 하는 경우 Freeze Frame 노드를 사용합니다.
이 노드는 텍스처 에셋에 대해 선택적인 레퍼런스를 허용합니다. 텍스처를 제공하면 플레이어 창에서 지정한 텍스처가 연결된 클라이언트에 표시됩니다. 텍스처를 제공하지 않으면 이 노드를 호출했을 때 언리얼 엔진 애플리케이션에서 생성된 마지막 렌더링된 프레임이 연결된 클라이언트에 표시됩니다.
-
모든 프레임 스트리밍을 재개해야 하는 경우 Unfreeze Frame 노드를 사용합니다.
단일 프레임 또는 이미지 텍스처 프리즈는 브라우저의 입력에 영향을 미치지 않습니다. 기본적으로 플레이어 페이지는 프리즈 상태에서도 키보드 및 마우스 이벤트를 언리얼 엔진에 계속 전달합니다.
언리얼 엔진 5에서 플레이어 페이지와 커뮤니케이션하기
언리얼 엔진 애플리케이션이 커스텀 이벤트를 모든 연결된 플레이어 HTML 페이지로 전송하도록 지정하고, 플레이어의 JavaScript 환경에서 이러한 이벤트에 응답할 수 있습니다. 이렇게 하면 게임플레이 이벤트에 따라 웹 페이지 UI를 변경할 수 있습니다.
구성 방법은 다음과 같습니다.
-
언리얼 엔진 애플리케이션에서 플레이어 페이지로 이벤트를 전송해야 할 때마다 Pixel Streaming > Send Pixel Streaming Response 노드를 사용합니다. 해당 노드에 커스텀 스트링 실행인자를 지정하여 플레이어 페이지에 발생한 이벤트를 표시합니다.
클릭하면 이지지가 확대됩니다.
보다 확장된 예시는 다음과 같으며, 여기에서는 3 키를 누르면 플레이어에게 응답을 전송합니다.
클릭하면 이지지가 확대됩니다.
-
플레이어 페이지의 JavaScript에서 언리얼 엔진 애플리케이션의 응답 이벤트가 페이지에 수신될 때마다 호출할 커스텀 이벤트 핸들러 함수를 작성해야 합니다. 이 함수는 Send Pixel Streaming Response 노드에 의해 전송된 원래 스트링 실행인자를 전달합니다. 예를 들면 다음과 같습니다.
function myHandleResponseFunction(data) { console.warn("Response received!"); switch (data) { case "MyCustomEvent": ... // 한 이벤트 타입 처리 case "AnotherEvent": ... // 다른 이벤트 처리 } }
-
app.js
에 의해 제공된addResponseEventListener
함수를 호출하여 리스너 함수를 등록합니다. 이벤트 리스너 및 해당 함수에 대해 고유한 이름을 이 함수에 전달합니다. 예를 들면 다음과 같습니다.addResponseEventListener("handle_responses", myHandleResponseFunction);
-
이벤트 리스너를 삭제해야 하는 경우
removeResponseEventListener
를 호출하고 동일한 이름을 전달합니다. 예를 들면 다음과 같습니다.removeResponseEventListener("handle_responses");
더 복잡한 데이터를 전달해야 하는 경우에는 Send Pixel Streaming Response 노드에 JSON으로 전달하는 스트링 포맷을 지정할 수 있습니다. 예를 들면 다음과 같습니다.

픽셀 스트리밍 이벤트에 응답하기
픽셀 스트리밍 시스템은 애플리케이션의 게임플레이 코드가 픽셀 스트리밍 세션의 수명 동안 발생하는 일부 이벤트에 응답할 수 있게 해줍니다. 이러한 이벤트는 블루프린트 이벤트와 네이티브 C++ 이벤트의 두 가지 방식으로 수행됩니다.
블루프린트 이벤트
이러한 델리게이트는 언리얼 엔진 5의 블루프린트 에디터를 통해 액세스할 수 있습니다.
이벤트 | 설명 |
---|---|
OnConnectedToSignallingServer | 언리얼 엔진 애플리케이션의 인스턴스가 Cirrus 시그널링 서버에 연결되면 발생합니다. |
OnDisconnectedFromSignallingServer | 언리얼 엔진 애플리케이션의 인스턴스가 Cirrus 시그널링 서버에서 연결 해제되면 발생합니다. |
OnNewConnection | 새 클라이언트가 언리얼 엔진 애플리케이션의 인스턴스에 연결되면 발생합니다. |
OnConnectionClosed | 언리얼 엔진 애플리케이션의 인스턴스에 연결된 클라이언트가 연결 해제되면 발생합니다. |
On All Connections Closed | 언리얼 엔진 애플리케이션의 인스턴스에 연결된 마지막 클라이언트가 연결 해제되면 발생합니다. 이 이벤트가 발생한 후에는 애플리케이션의 미디어 스트림을 보는 클라이언트가 없게 됩니다. 이를 사용하면 애플리케이션을 초기 상태로 리셋하여 게임플레이 로직에서 새 클라이언트가 참가할 수 있도록 준비할 수 있습니다. |
OnStatChanged | FPixelStreamingPlayerId, FName, float (플레이어 ID, 통계 이름 및 통계 값)의 포맷으로 여러 픽셀 스트리밍 통계를 보고합니다. |
이러한 이벤트에 응답하기 위해서는 픽셀 스트리밍 델리게이트(Pixel Streamer Delegates) 클래스를 사용하여 여기에 바인딩합니다. 일반적으로 게임플레이를 시작할 때 이 바인딩을 구성합니다. 예를 들어 Event BeginPlay 이벤트에 대한 응답으로 이를 수행할 수 있습니다. 바인딩이 구성된 다음에는 바인딩된 이벤트가 트리거될 때마다 커스텀 이벤트가 트리거됩니다.
-
'블루프린트 그래프 에디터(Blueprint Graph Editor)'의 노드 실행 핀에서 오른쪽으로 드래그하고 픽셀 스트리머 델리게이트 > Get Pixel Streamer Delegates 를 선택합니다.
-
해당 반환 값(Return Value) 에서 오른쪽으로 드래그하여 픽셀 스트리머 델리게이트 카테고리를 펼칩니다. 이벤트 바인딩 및 바인딩 해제를 위한 새 옵션이 표시됩니다.
-
Bind Event to On All Connections Closed 와 같이 응답하려는 이벤트에 대해 Bind... 옵션을 선택합니다. 이벤트(Event) 입력이 있는 새 노드가 표시됩니다. Get Pixel Streamer Delegates 에서 입력 실행 핀을 출력 실행 핀에 연결합니다.
-
트리거하려는 커스텀 이벤트가 이미 있으면 제목줄에서 출력 델리게이트(Output Delegate) 핀을 바로 앞에서 생성한 Bind 노드의 이벤트 입력에 연결합니다. 그렇지 않은 경우 이벤트 입력에서 왼쪽으로 드래그하고 이벤트 추가(Add Event) > 커스텀 이벤트 추가(Add Custom Event) 를 선택하여 새 커스텀 이벤트를 생성합니다.
-
픽셀 스트리밍 이벤트에 응답하기 위해 실행하려는 블루프린트 로직에 커스텀 이벤트를 연결합니다.
예를 들어 다음 구현은 동일한 블루프린트에 정의된 커스텀 함수를 호출하여 애플리케이션을 초기 상태로 리셋합니다.

C++ 이벤트
개발자는 자신의 핸들러를 이러한 픽셀 스트리밍 델리게이트에 등록할 수 있습니다. 개발자가 언리얼 엔진에서 C++ 델리게이트를 사용하는 것과 관련한 자세한 내용을 확인해야 하는 경우에는 멀티캐스트 델리게이트 문서를 참고하는 것을 권장합니다. 픽셀 스트리밍 델리게이트를 사용하는 방법에 대한 간단한 예시는 다음과 같습니다.
#include "PixelStreamingPlayerId.h"
#include "PixelStreamingDelegates.h"
void FExample::OnStatChanged(FPixelStreamingPlayerId PlayerId, FName StatName, float StatValue)
{
//TODO: 변경된 통계 관련 작업을 수행합니다.
}
void FExample::BindToDelegates()
{
// OnStatChangedNative 델리게이트에 바인딩합니다.
if(UPixelStreamingDelegates* Delegates = UPixelStreamingDelegates::GetPixelStreamingDelegates())
{
Delegates->OnStatChangedNative.AddRaw(this, &FExample::OnStatChanged);
}
};