픽셀 스트리밍 시스템이 퀵스타트 가이드대로 구성되어 있다면, 언리얼 엔진 애플리케이션의 게임플레이 코드에서 특별한 작업을 하지 않아도 런타임에서 시스템을 관리할 수 있습니다. 하지만 픽셀 스트리밍 플러그인에서 제공하는 방법을 사용하면 선택에 따라 픽셀 스트리밍 시스템의 컨트롤과 인터랙션을 통해 원하는 효과를 달성할 수 있습니다. 이 페이지에서는 이러한 추가 옵션을 설명합니다.
프리즈 프레임
언리얼 엔진 애플리케이션에서 렌더링하는 모든 프레임을 미디어 스트림으로 인코딩하는 방식에는 몇 가지 단점이 있습니다. 언리얼 엔진을 실행하는 컴퓨터의 리소스가 소모되고, 모든 프레임을 네트워크로 전송하는 과정에서 대역폭이 사용되며, 가용 대역폭에 따라 인코딩 과정에서 렌더링된 이미지의 퀄리티가 떨어질 수 있습니다.
GPU 리소스와 네트워크 대역폭 사용을 최소화하려면 경우에 따라 픽셀 스트리밍 플러그인을 임시 비활성화하여 모든 프레임을 인코딩해서 전송하는 대신 연결된 여러 클라이언트에게 하나의 스태틱 이미지만 보여주는 것이 나을 때가 있습니다. 예를 들면 다음과 같습니다.
-
클라이언트가 애플리케이션과 인터랙션하지 않고 있으며 가상 월드에 움직이는 대상이 없기 때문에 변화가 발생할 때까지 마지막으로 렌더링된 프레임을 프리징하고 싶은 경우
-
클라이언트에게 로딩 화면이나 메시지 캡션 등 임의의 이미지를 보여주고 싶은 경우
이런 경우를 위해 픽셀 스트리밍 플러그인은 인코딩을 일시정지 및 재개할 수 있는 블루프린트 노드를 제공합니다. 이 노드는 블루프린트 에디터의 픽셀 스트리밍 프리즈 프레임(Pixel Streaming Freeze Frame) 카테고리에서 확인할 수 있습니다.

-
미디어 스트림을 스태틱 이미지로 대체하고 싶다면 Freeze Frame 노드를 사용합니다.
이 노드는 선택에 따라 텍스처 에셋의 레퍼런스를 수락합니다. 레퍼런스를 제공하면 연결된 클라이언트가 플레이어 창으로 여러분이 지정한 텍스처를 볼 수 있습니다. 레퍼런스를 제공하지 않으면 연결된 클라이언트는 노드가 호출된 시점에 언리얼 엔진 애플리케이션이 생성한 마지막으로 렌더링된 프레임을 보게 됩니다.
-
다시 모든 프레임을 스트리밍하고 싶으면 Unfreeze Frame 노드를 사용합니다.
단일 노드나 이미지 텍스처 노드로 프리징해도 브라우저에서 들어오는 입력에는 영향이 없습니다. 기본적으로 플레이어 페이지는 프리징 상태에서 키보드와 마우스 이벤트를 언리얼 엔진으로 전달합니다.
픽셀 스트리밍 이벤트에 대한 반응
픽셀 스트리밍 시스템에서는 애플리케이션의 게임플레이 코드가 픽셀 스트리밍 세션의 수명 동안에 발생하는 선택된 이벤트에 반응할 수 있습니다. 이러한 이벤트로는 블루프린트 이벤트와 네이티브 C++ 이벤트가 있습니다.
블루프린트 이벤트
이러한 델리게이트는 UE5의 블루프린트 에디터를 통해 액세스할 수 있습니다.
이벤트 | 설명 |
---|---|
OnConnectedToSignallingServer | 이 언리얼 엔진 애플리케이션 인스턴스와 Cirrus 시그널링 서버가 연결될 때 방출됩니다. |
OnDisconnectedFromSignallingServer | 이 언리얼 엔진 애플리케이션 인스턴스와 Cirrus 시그널링 서버의 연결이 해제될 때 방출됩니다. |
OnNewConnection | 이 언리얼 엔진 애플리케이션 인스턴스와 연결된 클라이언트의 연결이 해제될 때 방출됩니다. |
OnConnectionClosed | 이 언리얼 엔진 애플리케이션 인스턴스와 연결된 클라이언트의 연결이 해제될 때 방출됩니다. |
On All Connections Closed | 이 언리얼 엔진 애플리케이션 인스턴스와 연결된 마지막 클라이언트의 연결이 해제될 때 방출됩니다. 이 이벤트가 방출된 뒤에는 애플리케이션의 미디어 스트림을 보는 클라이언트가 없어집니다. 이 기회를 활용해 게임플레이 로직이 새로운 클라이언트의 참여에 대비해 애플리케이션을 초기 상태로 초기화되도록 할 수 있습니다. |
이러한 이벤트에 반응하려면 픽셀 스트리머 델리게이트(Pixel Streamer Delegates) 클래스를 사용해 이벤트에 바인딩합니다. 보통 이 바인딩은 게임플레이 시작 시 구성합니다. 예를 들어, Event BeginPlay 이벤트에 대한 반응으로 바인딩을 구성할 수 있습니다. 바인딩이 구성되면 바인딩한 이벤트가 트리거될 때마다 커스텀 이벤트가 트리거됩니다.
-
블루프린트 그래프 에디터에서 마우스 오른쪽 버튼으로 원하는 노드의 실행 핀을 드래그한 다음, Pixel Streamer Delegates > Get Pixel Streamer Delegates 를 선택합니다.
-
반환 값(Return Value) 에서 마우스 오른쪽 버튼으로 드래그한 뒤 Pixel Streamer Delegates 카테고리를 펼칩니다. 이벤트 바인딩 및 언바인딩을 위한 여러 옵션이 보일 것입니다.
-
반응하고 싶은 Bind... 옵션을 클릭합니다. Bind Event to On All Connections Closed 를 예로 들 수 있습니다. 그러면 Event 입력을 가진 새 노드가 생성됩니다. 새 노드의 입력 실행 핀을 Get Pixel Streamer Delegates 의 출력 실행 핀에 연결합니다.
-
이미 트리거하고 싶은 커스텀 이벤트가 있다면 노드 제목 표시줄의 Output Delegate 핀을 방금 생성한 Bind 노드의 Event 입력에 연결합니다. 또는 Event 입력에서 드래그한 뒤 이벤트 추가(Add Event) > 커스텀 이벤트 추가(Add Custom Event) 를 선택해 새 커스텀 이벤트를 생성합니다.
-
픽셀 스트리밍 이벤트에 반응하여 실행하고 싶은 블루프린트 로직에 커스텀 이벤트를 연결합니다.
예를 들어, 이 구현은 동일한 블루프린트에 정의된 커스텀 함수를 호출해 애플리케이션을 초기 상태로 초기화합니다.

C++ 이벤트
개발자는 픽셀 스트리밍 델리게이트에 자체 핸들러를 등록할 수 있습니다. 언리얼 엔진에서 C++ 델리게이트를 사용하는 구체적인 방법은 https://docs.unrealengine.com/5.0/ko/multicast-delegates-in-unreal-engine 페이지를 참조하세요. 픽셀 스트리밍 델리게이트의 간단한 예시는 다음과 같습니다.
#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);
}
};