리플레이 시스템

게임플레이 녹화 및 재생을 위한 리플레이 시스템에 대한 개요입니다.

Windows
MacOS
Linux

언리얼 엔진 4 (UE4) 에는 게임플레이를 녹화하여 나중에 시청할 수 있도록 해주는 Replay (리플레이) 시스템이 있습니다. 이 기능은 데디케이티드 서버에서 플레이되는 멀티플레이어 게임의 라이브에서부터, PIE (에디터에서 플레이) 세션을 포함한 싱글플레이어 게임에 이르기까지, 모든 게임에서 사용할 수 있습니다. 하이 레벨에서 리플레이 시스템 작동 방식은 DemoNetDriver 로 내장 리플리케이션 시스템에서 뽑은 데이터를 읽어옵니다. 이 데이터는 라이브, 네트워크 게임플레이 환경에서 NetDriver 가 작동되는 방식과 유사합니다. 프로젝트에 멀티플레이어 모드가 없다 하더라도, 데이터를 리플리케이트하도록 구성된 프로젝트는 별도의 수정 없이도 리플레이 시스템과 호환됩니다.

여기서 DemoNetDriver 가 네트워크 데이터를 Replay Streamer (리플레이 스트리머)로 전송하는데, 여기서 데이터의 필터링 및 저장 프로세스를 처리합니다. 리플레이를 시청할 때, DemoNetDriver 는 라이브 플레이 도중 사용 가능했던 리플리케이션 정보(는 물론 리플레이에만 연관성이 있는 것으로 지정된 특수 데이터 필드)에도 전부 접근할 수 있어, 이 데이터에서 게임의 이벤트를 재구성할 수 있습니다.

리플레이 시스템 함수 기능

리플레이 시스템의 기본 함수는 데모 녹화 시작 또는 중지, 아니면 기존에 녹화된 데모의 재생입니다. 재생 모드에서 리플레이 시스템은 일시정지, 재생 속도 변경, 특정 시간으로 점프하는 명령을 지원합니다. 이 시스템의 보다 고급적인 사용 예라면, 리플레이에 텍스트 태그 (보통 메타 태그 또는 게임에 연관된 플레이어 이름) 추가한다거나, 버전 정보 또는 텍스트 태그로 기존 리플레이를 질의하는 작업을 들 수 있습니다. 리플레이 시스템은 C++ 코드로 사용할 수 있는데, 주로 UGameInstanceUWorld 클래스를 통해서, 또는 콘솔 명령이나 명령줄 인수와 함께 사용됩니다.

함수 또는 변수 이름

해당하는 콘솔 명령

효과

UGameInstance::StartRecordingReplay

"demorec (ReplayName)"

리플레이 녹화를 시작합니다. (ReplayName) 파라미터가 제공되지 않은 경우, 리플레이 시스템 자체적으로 이름을 생성할 수 있습니다.

UGameInstance::StopRecordingReplay

"demostop"

현재 리플레이 녹화를 중지합니다.

UGameInstance::PlayReplay

"demoplay (ReplayName)"

지정된 리플레이를 재생합니다.

UDemoNetDriver::GotoTimeInSeconds

"demoscrub (ReplayTime)"

리플레이의 (초 단위로) 지정된 시간으로 점프합니다.

UWorld::Pauser (variable)

"demopause"

월드의 DemoNetDriver->ServerConnection 에는 OwningActor 변수가 있습니다. Pauser 를 그 값으로 설정하면 리플레이가 일시정지됩니다. 다시 NULL 로 설정하면 리플레이가 재개됩니다. "demopause" 콘솔 명령은 그 변수를 자동으로 설정 또는 지웁니다.

WorldSettings->DemoPlayTimeDilation (variable)

"demospeed (ReplaySpeed)"

시간 스케일 인수 설정을 통해 재생 속도를 높이거나 낮춥니다. 값이 1.0 이면 정상 속도입니다.

AGameMode::bHandleDedicatedServerReplays (variable)

N/A

이 변수를 true 로 설정하면 데디케이티드 서버가 게임을 자동으로 녹화합니다.

DemoNetDriver 및 스트리머

DemoNetDriver 는 시리얼라이즈된 네트워크 드라이버로 리플리케이트된 데이터를 Streamer (스트리머)에 전달하고, 스트리머는 그 정보를 기록하여 이후 재생할 때 사용합니다. DemoNetDriver 기능 및 엔진에 포함된 스트리머 관련 자세한 내용은 데모 넷 드라이버 및 스트리머 문서를 참고하세요.

하위 호환성

리플레이 시스템에는 4.13 버전부터 하위 호환성이 지원됩니다. 즉 리플리케이트되는 프로퍼티를 추가 또는 제거하는 등 빌드에 변경을 가한 후에도 원본 빌드로 녹화했던 리플레이 로드 및 시청이 가능하다는 뜻입니다. 대부분의 경우 리플리케이트되는 필드 중 제거된 것은 자동으로 생략하고 추가된 것에는 기본 값을 사용하도록 리플레이 시스템이 자동 처리해 줍니다. 참고로 NetSerialize 로 덮어쓴 구조체는 이와 같은 데이터 포맷 차이를 수동으로 처리해 줘야 합니다. 이를 위해 FArchive 는 이제 EngineNetVerGameNetVer 함수를 제공하는데, 각각 엔진과 게임 버전을 알아내어 게임플레이 데이터가 현재 빌드에 맞도록 조절할 수 있도록 해줍니다. FNetworkVersionGetLocalNetworkVersionOverride 는 선택한 것의 uint32 버전 번호를 반환하는 함수에 바인딩할 수 있습니다. 호환을 위해 정확히 일치할 필요가 없는 경우 FNetworkVersion 에는 IsNetworkCompatibleOverride 라는 델리게이트가 있는데, 이를 덮어써서 두 버전을 비교하여 호환 여부를 결정하도록 할 수 있습니다.

태그

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

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

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

네이버 카페
공식 포럼