일시정지¶
Strix에서는 액터의 복제가 자동입니다. 방에 있을 때는 Strix Replicator 요소가 있는 액터를 만들 때마다(스폰할 때마다) 방 안에 있는 다른 모든 클라이언트에 레플리카가 자동으로 만들어집니다. 다른 클라이언트에서 만들어지는 액터도 마찬가지입니다. 즉, 그 액터의 레플리카가 내 클라이언트에도 만들어지는 것입니다. 오리지널 액터가 파괴되면 레플리카도 파괴됩니다. 배후에서 네트워크 개체, 즉 방 서버가 액터를 추적하기 위해 관리하는 개체도 적절히 만들어지고 삭제됩니다. 네트워크 개체 관리자라고 하는 Strix의 내부 클라이언트 측 요소가 그것을 관리합니다.
자동 복제는 일반적으로 잘 작동하지만 일시적으로 자동 동작을 멈춰야 할 때가 있을 수 있습니다.
함수¶
Strix의 복제 기능은 다음 세 가지 블루프린트 함수로 일시정지하고 또 일시정지를 해제할 수 있습니다.
또, 방에 입장하는 Strix 함수(방을 만들고 입장하는 함수를 포함)에는 Pause Network Objects라고 하는 인수가 있습니다. 그것을 참으로 설정하면 방에 입장한 직후 다른 동작이 일어나기 전에, 또 입장 함수의 성공 콜백이 실행되기 전에 복제가 일시정지합니다.
일시정지¶
Pause Network Object Manager 함수는 복제를 일시정지합니다. 일시정지 상태에서 새 네트워크 개체가 만들어지며, 레플리카 액터는 스폰하지 않습니다.
일시정지 해제¶
Unpause Network Object Manage 함수는 복제의 일시정지를 해제합니다. 일시정지 상태에 있는 네트워크 개체가 레플리카 액터를 만듭니다. 일시정지 후 액터가 파괴된 레플리카가 있다면 액터를 다시 만듭니다.
상태 확인¶
Is Network Object Manager Paused 함수는 네트워크 개체 관리자가 일시정지하면 참을 리턴합니다.
참고
일시정지되면 새 액터가 다른 클라이언트로 복제되지 않습니다. 레플리카 액터의 실제 스폰을 막는 것입니다. 일시정지가 해제되면 새 레플리카가 만들어집니다.
일시정지는 Strix 네트워크 개체의 복제에만 관련이 있으며, 게임 로직에는 아무런 영향이 없습니다. 블루프린트 함수는 평소처럼 작동하고 네트워크 개체 관리자만 일시정지합니다.
세 함수 모두 채널 ID를 인수로 취합니다. 일시정지하면 그 채널에 영향이 있다는 뜻입니다. 한 채널에서 일시정지해도 다른 채널의 액터 복제는 멈추지 않습니다.
참고
이 기능은 아직 시험 중입니다. 액터를 적절히 클린업하고 있는 경우에만 이용해 주십시오. 주요 사용례는 다음과 같습니다.
활용 사례¶
레벨 전환¶
일시정지를 많이 쓰는 경우는 게임 중에 다른 레벨로 전환할 때입니다.
게임 애플리케이션이 같은 시점에 레벨 전환을 하려고 해도 전환의 실제 시점은 클라이언트마다 다를 수 있습니다. Strix Replicator의 일반적인 동작은 레벨 전환을 하는 동안에도 액터들의 스폰과 파괴를 항상 동기화하는 것입니다. 한 클라이언트가 새 레벨에서 액터들을 복제하기 시작할 때 다른 클라이언트는 아직도 이전 레벨에 있으면서 더 빠른 클라이언트가 보낸 새 레벨의 레플리카를 이전 레벨에 스폰할 가능성이 있습니다. 느린 클라이언트가 Open Level 함수를 실행하면 Unreal Engine이 그 레플리카를 파괴합니다.
이렇게 되지 않으려면, 어느 한 클라이언트라도 전환을 시작하기 전에 모든 클라이언트에서 복제를 일시정지하고, 모든 클라이언트가 전환을 완료한 후 일시정지를 해제하면 됩니다.
자세한 설명은 장면을 전환하는 방법 참조.
게임 내 방 입장¶
게임 내 레벨을 찾아 방에 입장하는 것도 일시정지가 필요할 수 있습니다.
클라이언트가 방에 입장하면 클라이언트의 네트워크 개체 관리자는 즉시 활동을 시작합니다. 이로 인해 네트워크 개체 관리자가 다른 방에 입장한 후 필요한 설정을 마치기 전에 클라이언트에서 레플리카 스폰을 시작할 수 있습니다. 특히 멀티플레이어 게임이 진행 중일 때 입장하면 이런 상황이 벌어집니다.
Join Node Room과 같은 함수에 성공 콜백을 할 때 Unpause Network Object Manager를 호출하면 너무 늦을 수도 있습니다. 실제 입장과 성공 콜백의 실행 사이에 지연이 생기고 복제가 그 지연 중에 시작될 수 있기 때문입니다.
이런 문제가 생기지 않게 하려면 Pause Network Objects 인수를 참으로 설정한 채 Join Node Room 함수를 호출하면 됩니다. 이 경우에는, 초기화를 마친 후에 Unpause Network Object Manager를 호출해야 합니다.