복제와 동기화 개요

Strix는 클라이언트마다 게임 월드를 따로 복사해 둡니다. 플레이어에게 똑같은 게임 월드를 만들어 주려면 이 복사본은 모두 동일해야 합니다. 이것을 동기화라고 합니다.

Strix는 게임 월드 속 개체와 그 속성을 실시간으로 동기화합니다. 이 섹션에서는 동기화에 필요한 기능을 설명합니다.

동기화에는 다음과 같이 몇 가지 타입이 있습니다.

복제

먼저, 복사된 월드 각각에 보이는 개체는 모두 같아야 합니다. 이를 위해서는 한 클라이언트에서 생성된 개체가 다른 클라이언트에서도 생성되어야 하고 삭제된 개체는 모든 클라이언트에서 삭제되어야 합니다. 이 같은 동기화를 복제라고 합니다.

오리지널 개체를 만든 클라이언트를 그 개체의 소유자라고 합니다. (단, 이 소유권은 나중에 다른 클라이언트에게 양도할 수 있습니다.) 복제된 개체를 레플리카라고 합니다.

Strix에서는 StrixReplicator 요소가 복제를 처리합니다.

움직임

게임 월드에서는 수많은 물체가 움직이며 그 움직임 또한 동기화해야 합니다.

개체가 첫 장소에 있을 때 움직임을 제어할 책임은 방장에게 있습니다. Strix는 다른 클라이언트의 움직임을 동기화합니다. 움직임 동기화는 한 요소로도 처리되며, Strix에는 시나리오별로 움직임 동기화를 처리하는 요소가 몇 가지 있습니다.

  • 그중에서 StrixMovementSynchronizer가 기능이 제일 많으며, 일반적인 게임 개체의 움직임을 대부분 처리할 수 있습니다.

  • StrixTransformSynchronizer는 간편 버전으로, 간단한 움직임만 하는 개체에 적합합니다. 복잡한 움직임은 처리하지 못하지만, 오버헤드가 적어 StrixMovementSynchronizer보다 빨리 작동합니다.

  • StrixVehicleSynchronizer는 비히클 타입 개체에 특화된 것입니다.

애니메이션

일부 게임 개체, 특히 크리처는 애니메이션이 있어 마치 살아 있는 것 같습니다. 애니메이션은 클라이언트 간에 동기화해야 합니다.

Strix에서는 StrixAnimationSynchronizer가 이 임무를 맡습니다.

변수/속성

게임 개체에는 여러 가지 변수가 있습니다. 일반적으로는 이것을 속성이라고 합니다. 개체의 각 측면은 이 속성을 바꿔 제어합니다.

Unity 게임 개체에는 Transform 요소가 있으며, 그 속성을 바꾸면 개체가 움직입니다. StrixTransformSynchronizer의 동작은 그 속성의 동기화로 볼 수 있습니다. Strix의 동기화 요소는 적정 수준에서 표준 속성을 관리합니다.

그러나, 각자 게임 개체 안에는 게임을 지원하는 다른 속성도 있습니다. 이 커스텀 속성도 알맞게 동기화해야 합니다.

Strix는 개체 속 변수를 무엇이든 편리하게 동기화할 수 있습니다.

RPC

RPC는 remote procedure call(원격 프로시저 호출)의 약자로, 다른 클라이언트에서 개체의 메서드를 호출할 때 이용할 수 있습니다. RPC를 통하면 무엇이든 동기화할 수 있습니다. 대부분은 플레이어 인풋으로 인한 액션을 동기화합니다.