멀티 유저 편집 워크플로는 하나의 서버 가 여러 세션 을 호스팅하는 클라이언트-서버 모델을 기반으로 만들어졌습니다. 각 세션은 동일한 네트워크의 모든 언리얼 에디터 인스턴스가 공유 환경 내에서 동일한 프로젝트 콘텐츠를 사용하여 협업하기 위해 연결할 수 있는 별도의 가상 워크스페이스입니다.

세션 워크스페이스 내부에서 각 사용자는 자신의 언리얼 에디터 인스턴스에서 가능한 모든 방법으로 프로젝트 콘텐츠와 인터랙션할 수 있습니다. 예를 들면 다음과 같습니다.
-
일부 사용자는 표준 데스크톱 PC 구성이나 필요에 따라 다른 플랫폼에서 키보드와 마우스를 사용하여 작업을 수행할 수 있습니다.
-
다른 사용자는 에디터의 VR 편집 모드를 사용하여 VR 헤드셋과 컨트롤러로 씬 내에서 시각화하고 작업을 수행할 수 있습니다. 또는 버추얼 카메라 같은 플러그인을 사용하여 모바일 디바이스를 통해 동일한 씬에 들어갈 수 있습니다.
연결된 사용자가 프로젝트에서 레벨을 변경하거나 에셋을 저장하는 경우, 해당 언리얼 에디터 인스턴스는 변경사항에 대한 정보를 서버로 자동 전달합니다. 서버는 이 모든 변경 레코드 또는 트랜잭션 을 트래킹하고, 해당 트랜잭션을 다른 모든 연결된 클라이언트에 전송하는 작업을 담당합니다. 그러면 각 클라이언트는 동일한 환경 내에서 로컬로 동일한 변경사항을 적용합니다. 이런 방식으로 모든 사용자가 프로젝트의 현재 레벨과 기타 에셋을 최신 변경사항이 적용된 상태로 유지할 수 있게 됩니다.
트랜잭션 동기화
멀티 유저 편집 시스템은 다양한 전략을 선택하여 작업 중인 에셋 타입과 적용된 변경사항의 특성에 따라 연결된 클라이언트 사이에 변경사항을 동기화합니다.
레벨: 즉시 동기화
레벨 콘텐츠에 적용된 모든 변경사항은 해당 세션의 다른 모든 컴퓨터에 즉시 동기화됩니다. 액터를 추가 또는 제거하거나, 한 곳에서 다른 곳으로 이동하거나, 머티리얼을 교체하거나, 액터의 프로퍼티를 변경하는 경우 세션의 다른 모든 사용자는 해당 변경사항이 즉시 적용되는 것을 확인할 수 있습니다. 툴을 드래그하여 액터를 이동, 회전 및 스케일 조절하는 경우 드래그하는 동안 다수의 트랜잭션이 발생됩니다. 다른 사용자는 이 사용자가 마우스를 떼기도 전에 변경사항을 확인할 수 있습니다.
예를 들어 다음 비디오에서 왼쪽 사용자가 액터를 한 곳에서 다른 곳으로 드래그하면 드래그를 놓기도 전에 이러한 변경사항이 오른쪽 사용자의 뷰포트에 즉시 반영됩니다. 마찬가지로 오른쪽의 사용자가 오브젝트를 회전하면 왼쪽의 사용자도 즉시 변경사항을 확인할 수 있습니다.
사용자가 동일한 에디터 모드에 있을 때만, 즉 모두 편집 모드에 있거나 에디터에서 플레이(PIE) 또는 시뮬레이트(Simulate) 모드 중 하나에 있을 때만 다른 사용자의 변경사항이 표시됩니다.
기타 에셋: 저장 시 동기화
멀티 유저 편집 시스템은 언리얼 엔진 프로젝트에 포함되어 있는 대부분의 에셋 타입을 수정할 때마다 즉시 동기화하지 않습니다. 이 에셋 타입에는 머티리얼, 머티리얼 인스턴스, 스태틱 메시 에셋, 블루프린트 클래스 등이 포함됩니다. 이 경우, 이러한 에셋을 수정하면 해당 변경사항이 즉시 확인되는 것은 자기 자신 뿐입니다. 변경사항을 저장하면 멀티 유저 편집 시스템이 트랜잭션을 세션의 다른 모든 사용자에게 전송합니다.
이 경우, 트랜잭션은 단순한 변경사항 레코드가 아닌 실제 저장된 에셋입니다. 이 업데이트 패키지 중 하나를 수신하는 에디터의 각 인스턴스는 즉시 핫 리로드하여 변경사항을 표시합니다.
예를 들어 다음 비디오에서는 왼쪽 사용자가 머티리얼을 변경해도 변경사항이 즉시 동기화되지 않습니다. 하지만 사용자가 에셋에 변경사항을 저장하면 트랜잭션이 처리되고 변경사항이 오른쪽 사용자에게 표시됩니다.
에셋을 저장하면 에셋이 자동으로 잠깁니다. 또한 일부 에셋 타입에 변경사항을 저장하지 않은 경우에는 멀티 유저 편집 시스템에서 이러한 에셋을 다른 사용자에게 더티로 표시합니다. 자세한 내용은 아래의 상충 방지하기를 참고하세요.
시퀀서: 재생 동기화 및 선택적 UI 동기화
멀티 유저 편집 시스템은 레벨 시퀀스와 마스터 시퀀스를 레벨과 같이 취급합니다. 사용자가 트랙 추가나 제거, 새 키프레임 추가와 같이 시퀀스를 변경하면 이러한 변경사항을 세션의 다른 모든 사용자에게 즉시 동기화합니다.
또한 한 사용자가 시퀀스를 재생하면 동일한 시퀀스가 열려 있는 모든 사용자에 대해 동일한 시퀀스가 즉시 재생됩니다. 재생을 시작한 사용자만 이를 중지할 수 있습니다. 시퀀스가 중지된 다음에는 누구나 다시 재생을 시작할 수 있습니다.
또한 한 사용자가 시퀀스를 열면 멀티 유저 편집 시스템이 모든 클라이언트에서 시퀀서 UI를 자동으로 열도록 선택할 수 있습니다. 멀티 유저 편집 시스템이 동일한 시퀀스가 열려 있는 모든 사용자에 대해 재생을 동기화하기 때문에 이 UI 동기화 옵션을 활성화하면 동일한 시퀀스가 재생되는 것을 모든 사용자가 동시에 볼 수 있습니다.
다음 비디오는 멀티 유저 편집 시스템이 시퀀서 UI 이벤트, 재생 이벤트 및 편집 이벤트를 동기화하는 방법을 보여줍니다.
위와 같은 시퀀서 UI 동기화를 활성화하려면 Concert.EnableOpenRemoteSequencer
콘솔 명령을 사용하면 됩니다. 자세한 내용은 멀티 유저 편집 레퍼런스의 콘솔 명령 섹션을 참고하세요.
멀티 유저 편집 시스템은 재생 이벤트를 동기화하지만, 다른 컴퓨터에서 재생되는 애니메이션은 프레임 레이트가 다를 수 있습니다. 각 언리얼 에디터 인스턴스에서 프레임 단위로 정확히 일치하는 결과가 나오지는 않습니다.
현재상태
멀티 유저 편집 시스템에서는 세션의 다른 사용자가 수행하는 작업을 확인하는 방법을 몇 가지 제공합니다.
다음 섹션에서 설명하는 현재상태 정보는 디스플레이 이름과 컬러를 사용하여 연결된 사용자를 구분합니다. 각 사용자는 프로젝트 세팅(Project Settings) 의 표시명(Display Name) 및 아바타 컬러(Avatar Color) 세팅으로 이러한 값을 커스터마이징할 수 있습니다. 자세한 내용은 멀티 유저 편집 레퍼런스를 참고하세요.
위치 및 뷰포트
다른 사용자와 같은 레벨에서 작업하는 경우에는 씬에 다른 사용자의 위치를 나타내는 아바타와 뷰포트를 볼 수 있습니다. 씬에서 인터랙션할 때 마우스 커서 또는 모션 컨트롤러가 선택한 오브젝트를 나타내는 레이저도 볼 수 있습니다.
예를 들어 다음 이미지는 같은 레벨에서 작업하는 두 데스크톱 사용자의 아바타를 보여줍니다.

언제든지 멀티 유저 브라우저(Multi-User Browser) 창의 연결된 클라이언트(Connected Clients) 패널에서 컨트롤을 사용하여 이 현재상태 정보를 작업할 수 있습니다.

아이콘 | 설명 |
---|---|
![]() |
이 사용자와 같은 위치 및 시점으로 즉시 텔레포트합니다. |
![]() |
이 사용자의 아바타와 레이저 포인터 표시를 토글합니다. |
또한 연결된 사용자에 대해 나열된 레벨 을 클릭하여 해당 사용자가 있는 레벨로 전환하고 해당 위치와 시점으로 즉시 텔레포트할 수 있습니다.
세션 변경 히스토리
멀티 유저 브라우저 창에는 현재 세션과 사용자가 세션에 연결하고 연결 해제할 때 발생한 모든 편집 트랜잭션 목록이 표시됩니다.

에셋 변경 히스토리
각 개별 에셋의 변경사항 목록도 볼 수 있습니다. '콘텐츠 브라우저(Content Browser)'에서 에셋을 우클릭하고 멀티 유저(Multi-User) > 에셋 히스토리(Asset History) 를 선택합니다. 이렇게 하면 이 에셋을 수정한 모든 트랜잭션 목록이 표시됩니다.

상충 방지하기
동시에 여러 사용자가 같은 콘텐츠로 작업하게 되면 결국 동시에 같은 항목을 변경하려고 시도하게 됩니다. 권한 설정에 너무 관대하면 사용자들이 제어권을 놓고 경합하거나 변경사항이 손실될 수 있는 위험이 있습니다. 반면에 너무 엄격하면 사용자들이 무언가가 필요할 때 수정할 수 있는 능력이 줄어들어 작업 속도가 저하되거나 완전히 막혀버릴 수도 있습니다.
멀티 유저 편집 시스템은 이 같은 양 극단 사이에서 균형을 찾아 사용자 간에 자주 발생할 수 있는 경합과 덮어쓰기 문제를 방지합니다.
드래그된 선택 잠금
레벨 뷰포트에서 이동, 회전 또는 크기 조정을 위해 선택 항목을 드래그할 때는 해당 액터를 독점적으로 제어할 수 있습니다. 이 상태에서는 다른 사용자가 레벨 뷰포트 에서 툴을 드래그하거나, 디테일(Details) 패널에서 프로퍼티를 설정하거나, 동일한 액터를 수정하려고 하면 변경사항이 반영되지 않습니다.
처음 사용자가 드래그 인터랙션을 중단하면, 여전히 선택한 상태라도 다른 사용자가 해당 액터 작업을 다시 시작할 수 있습니다.
에셋 잠그기
다른 사용자가 특정 에셋을 수정하지 못하게 하려는 경우에는 잠그면 됩니다. 에셋이 잠긴 동안에는 잠근 사용자만 새로운 수정사항을 저장할 수 있습니다. 다른 사용자도 자신의 로컬 프로젝트에서 잠긴 에셋을 수정할 수 있지만, 해당 이 에셋을 소유한 사용자가 잠금을 해제할 때까지는 자신의 수정 사항은 저장할 수 없습니다.
에셋을 잠그고 해제하는 방법은 두 가지입니다:
-
잠금 해제된 에셋을 수정하기 시작할 때마다 변경사항을 저장할 때까지 사용자가 임시로 잠그는 상태가 됩니다.
-
에셋을 수정하지 않고 잠그거나 잠금을 해제할 수도 있습니다. 콘텐츠 브라우저 에서 에셋을 우클릭하고 멀티 유저 > 에셋 잠금(Lock Asset(s)) 또는 멀티 유저 > 에셋 잠금 해제(Unlock Asset(s)) 를 선택합니다.
잠겨 있고 수정된 에셋은 콘텐츠 브라우저 에서 에셋의 섬네일에 표시되는 오버레이로 확인할 수 있습니다. 에셋에 커서를 올리면 잠금을 소유한 사용자와 에셋을 수정한 사용자에 대한 디테일이 표시됩니다.

오버레이 | 설명 |
---|---|
![]() |
흰색은 에셋을 잠갔음을 나타냅니다. 언제든지 계속 수정할 수 있습니다. 다른 사용자는 처음 사용자가 저장하거나 잠금을 해제할 때까지 이 에셋을 수정할 수 없습니다. |
![]() |
흰색 아바타는 다른 사용자가 이 에셋을 잠갔음을 나타냅니다. 이 에셋은 여전히 로컬에서 수정할 수 있습니다. 이렇게 하면 다른 사용자가 잠갔다는 알림이 표시됩니다: 잠근 사용자가 잠금을 해제할 때까지 자신이 수정한 사항을 저장하여 다른 사용자와 동기화할 수 없게 됩니다. |
![]() |
별표는 에셋이 다른 컴퓨터에서 더티 상태(수정되었지만 저장되지 않은 상태)임을 나타냅니다. 선택된 에셋 타입만 이 아이콘으로 마킹됩니다. 이 상태의 에셋은 수정할 때 주의해야 합니다. 누구나 변경사항을 처음에 저장하면 파일이 잠기고 변경사항이 다른 모든 클라이언트에 전파되어 다른 사람이 수행한 변경사항이 손실될 수 있습니다. |
실행 취소 및 다시 실행
연결된 각 사용자는 자신의 작업 히스토리에만 액세스할 수 있습니다. 해당 히스토리 내에서 각 사용자는 마치 세션 일부가 아닌 오프라인 작업인 것처럼 액션을 자유롭게 실행 취소 또는 다시 실행할 수 있습니다. 하지만 다른 사용자가 수행한 작업은 실행 취소하거나 다시 실행할 수 없습니다.
일반 상태에서 시작하기
긴 딜레이와 높은 대역폭 사용량이 발생하는 것을 방지하기 위해 멀티 유저 편집 시스템의 서버는 연결된 사용자 간에 프로젝트의 전체 콘텐츠를 전송하지 않습니다. 대신 즉각적인 동기화가 필요할 때 소량의 트랜잭션 레코드만 교환하는 방식을 사용하며, 세션 동안 이러한 에셋이 수정되고 저장되는 경우 레벨, 스태틱 메시, 블루프린트 같은 에셋만 순환시킵니다.
들어오는 트랜잭션이 모든 연결된 사용자에 대해 정확하게 동일한 방식으로 적용되어 모든 사용자의 콘텐츠가 다른 모든 사용자의 콘텐츠와 동기화된 상태로 유지될 수 있게 하는 유일한 방법은 연결된 모든 사용자가 정확히 동일한 상태의 정확히 동일한 콘텐츠로 시작 하게 만드는 것입니다. 이렇게 하면 같은 순서로 각 클라이언트에 동일한 트랜잭션 목록이 적용되므로 각 사용자의 전체 콘텐츠 상태가 동기화된 상태로 유지됩니다.
모든 사용자가 동일한 콘텐츠로 시작하게 만드는 일반적인 방법은 Perforce, Git, SVN 같은 소스 컨트롤 시스템을 사용하고 각 사용자가 세션에 다 같이 연결하기 전에 자신의 로컬 사본을 다른 모든 사용자와 동일한 체인지리스트 또는 리비전에 복사하게 만드는 것입니다. 자세한 내용은 아래의 멀티 유저 편집 및 소스 컨트롤 섹션을 참고하세요.
소스 컨트롤 사용이 필수는 아니며, 외부 소스 컨트롤 시스템 없이도 멀티 유저 편집 기능을 사용할 수는 있습니다. 하지만 이 경우에는 협업이 필요한 모든 사용자가 정확히 동일한 프로젝트 콘텐츠로 안정적으로 시작할 수 있도록 조직 내에서 프로젝트 콘텐츠를 공유할 수 있는 방법을 찾아야 합니다.
세션 유효성 검사
사용자가 세션 연결을 시도할 때마다 서버가 콘텐츠의 특정 어트리뷰트와 작동 환경을 검사하여 세션이 처음에 시작된 콘텐츠와 일치하는지 확인합니다. 이러한 검사 중 하나라도 실패하면 서버는 사용자가 세션에 참가하는 것을 허용하지 않습니다.
-
언리얼 엔진 버전 - 세션에 연결하려는 사용자의 언리얼 엔진 버전이 세션을 시작한 사용자와 동일한지 확인합니다. 예를 들어 세션을 시작한 사용자가 버전 5.0을 사용했고 다른 사용자가 버전 4.27을 사용하여 연결하려고 시도하면 서버에서 연결이 허용되지 않습니다. 이렇게 하면 다른 버전 간의 에셋 포맷 변경사항으로 인해 발생하는 문제를 방지할 수 있습니다.
-
프로젝트 이름 - 서버는 세션에 참가하려는 사용자가 열어둔 프로젝트 이름이 세션을 생성할 때 사용한 프로젝트 이름과 일치하는지 검사합니다. 이 검사가 실패하면 서버는 두 프로젝트의 콘텐츠가 동일하지 않을 수 있다고 가정하고 연결을 거부합니다.
-
소스 컨트롤 리비전 - 세션을 시작한 사용자가 언리얼 에디터에서 소스 컨트롤 제공자에 연결된 경우, 서버는 프로젝트의 체인지리스트 또는 리비전을 세션과 연결합니다. 소스 컨트롤 제공자가 활성화된 다른 사용자가 이 세션에 연결하려고 시도할 때 서버는 체인지리스트 또는 리비전이 세션에 연결된 것과 일치하는지 확인합니다.
-
로컬에서 수정된 파일 - 사용자가 소스 컨트롤 제공자에 연결되어 있고 로컬에서 수정된 파일이 있는 경우, 서버는 이 사용자가 새로운 세션을 생성하고 기존 세션에 참가하는 것을 방지합니다. 이를 통해 사용자마다 체인지리스트가 동일하지만 특정 에셋 버전이 달라질 수 있는 가능성을 피할 수 있습니다.
트랜잭션 및 변경사항 유지
자신과 팀원이 라이브 세션에서 작업할 때 에디터는 일종의 가상 샌드박스 방식으로 로컬 프로젝트 콘텐츠 위에 트랜잭션을 적용합니다. 디스크에 있는 프로젝트 파일은 세션에 남아 있는 한 실제로는 전혀 수정되지 않습니다. 멀티 유저 편집 시스템은 변경사항을 트래킹하고, 해당 트랜잭션을 프로젝트 콘텐츠에 적용한 결과를 언리얼 에디터에 보여줍니다.
언제, 어떤 세션 참가자가 세션 변경사항을 지속 하도록 선택하면, 현재 세션에서 이루어진 모든 수정 사항을 디스크의 로컬 파일에 적용합니다. 소스 컨트롤 제공자에 연결된 상태에서 세션을 시작한 경우에는 선택적으로 동일한 변경사항을 새 체인지리스트 또는 리비전에 체크인할 수도 있습니다.

변경사항을 지속시키지 않고 세션을 나가면 에디터는 세션 시작 또는 참가 이전 상태로 프로젝트를 자동으로 되돌립니다. 즉, 서버는 세션에서 수정된 내용을 버리고 프로젝트의 모든 에셋을 핫 리로드합니다. 세션을 나가면 세션 변경사항이 더이상 보이지 않지만, 트랜잭션이 완전히 손실된 것은 아닙니다. 각 세션은 모든 사용자가 나간 후에도 모든 트랜잭션 레코드를 유지합니다. 나중에 같은 세션에 다시 참가하면 멀티 유저 편집 시스템이 모든 해당 트랜잭션을 그대로 에디터에 다시 적용합니다.
변경사항을 지속시키지 않고 소유한 세션을 나가는 경우, 변경사항을 지속시킬지 묻는 메시지가 표시됩니다. 이 방법을 통해 실수로 세션의 변경사항이 손실되는 상황을 방지할 수 있습니다. 이 메시지를 무시하더라도 보류 중인 변경사항은 영원히 손실되지 않습니다. 언제든 세션에 다시 참가하여 나중에도 변경사항을 지속시킬 수 있습니다. 서버가 종료되는 경우에도 세션 변경사항은 손실되지 않습니다. 자세한 내용은 다음 섹션을 참고하세요.
중복성
서버는 세션을 생성한 사용자가 명시적으로 삭제할 때까지 또는 서버 자체가 종료될 때까지 각 세션을 유지합니다. 따라서 개별 클라이언트나 심지어 모든 클라이언트에서 크래시나 연결 해제가 발생하더라도 수정 사항이 손실되는 일은 없습니다. 서버에 다시 연결하면 나갔을 때 상태 그대로 유지됩니다.
서버는 세션 레코드를 디스크에 저장하므로 예상치 못한 종료로 인해 정보가 손실되는 것도 방지할 수 있습니다.
-
서버가 비정상적으로 종료되면 다음 번에 서버를 재시작할 때 모든 세션이 원래 상태 그대로 즉시 복원됩니다.
-
서버를 완전히 종료하면 모든 라이브 세션을 아카이브에 보관합니다. 나중에 아카이브에서 세션을 복원할 수 있습니다. 자세한 내용은 다음 섹션을 참고하세요.
멀티 유저 편집 및 소스 컨트롤
멀티 유저 편집 시스템에는 소스 컨트롤 시스템과 유사한 기능을 제공합니다. 예를 들어 트랜잭션 히스토리를 저장하는 서버와 경합 감소를 위해 사용자가 에셋을 잠그는 기능 등이 여기에 포함됩니다. 하지만 멀티 유저 편집 기능이 소스 컨트롤을 대체하는 것은 아닙니다.
멀티 유저 편집 기능은 Perforce, SVN 또는 Git 같이 일반적으로 변경사항을 프로젝트에 기록하는 전용 소스 컨트롤 시스템을 통한 표준 협업 워크플로를 보완하는 데 가장 적합합니다.
Perforce 를 사용하는 경우, UGS(UnrealGameSync)를 사용하면 이 프로세스가 한결 간편해집니다. 자세한 내용은 UGS 문서를 참고하세요.
팀에 버전 컨트롤 시스템이 구성되어 있는 경우, 멀티 유저 편집 기능은 특정한 체인지리스트를 기반으로 제한된 기간에만 라이브 협업 환경으로 사용하세요.
-
각 라이브 세션(촬영, 일상적인 작업, 리뷰 미팅 또는 팀과 함께하는 모든 작업) 시작 시, 모든 참가자는 시작할 체인지리스트를 결정합니다. 이는 일반적으로 최신 리비전이며, 모든 사용자가 해당 리비전에 동기화합니다.
-
라이브 세션이 끝나면 한 사용자가 해당 변경사항을 팀에서 사용 중인 소스 컨트롤 시스템에 제출하여 보존합니다.
-
세션에서 다시 소스 컨트롤로 변경사항을 커밋한 후에는 더 이상 필요하지 않으므로 세션을 삭제할 수 있습니다.
-
다음 번에 다른 사용자들과 작업해야 하는 경우에는 최신 체인지리스트를 기반으로 새 세션을 시작합니다.
단일 멀티 유저 편집 세션은 며칠 또는 몇 주와 같이 오랜 기간 동안 사용하는 것은 권장하지 않습니다. 세션을 중간중간 중지하고 변경사항을 주기적으로 소스 컨트롤에 제출하세요.
언리얼 에디터 UI를 소스 컨트롤 제공자에 연결하는 방법은 언리얼 엔진에서의 협업을 참고하세요.
-game 모드에서 실행하기
-game
명령줄 옵션을 사용하여 프로젝트를 실행하려면 -messaging
옵션도 포함해야 합니다. 이 옵션을 사용하면 멀티 유저 편집 시스템 내에서 컴포넌트가 서로 내부적으로 커뮤니케이션하는 데 사용되는 MessageBus 시스템이 활성화됩니다.
네트워킹
세션에 참가하면 언리얼 에디터 인스턴스는 선택한 서버로 연결할 때 UDP 포트 6666 을 사용합니다.
-
서버에 연결하기 위해 언리얼 에디터를 실행하는 각 컴퓨터는 해당 서버 컴퓨터의 사설 IP 주소를 볼 수 있어야 합니다.
-
서버의 컴퓨터는 로컬 네트워크에서 들어오는 UDP 트래픽 6666 포트가 열려 있어야 합니다.
이 연결 방식은 하나의 LAN(Local Area Network) 내에 있거나 두 엔드포인트가 같은 VPN 내에 있어야 합니다. 개방형 인터넷 연결을 통해 언리얼 에디터 세션을 공유하는 것은 지원하지 않습니다.
시작하기 페이지의 지침을 따르면 간단한 LAN 환경에서 구성하고 실행하는 데는 어려움이 없을 것입니다. 클라이언트와 서버 간 연결을 설정하는 데 어려움이 있으면 언리얼 에디터 인스턴스 및 서버에 대한 UDP 메시징 세팅을 조정해야 할 수 있습니다. 자세한 내용은 고급 멀티 유저 네트워킹을 참고하세요.