복제와 동기화 개요¶
Strix는 클라이언트마다 게임 월드를 따로 복사해 둡니다. 플레이어에게 똑같은 게임 월드를 만들어 주려면 이 복사본은 모두 동일해야 합니다. 이것을 동기화라고 합니다.
Strix는 게임 월드 속 개체와 그 속성을 실시간으로 동기화합니다. 이 섹션에서는 동기화에 필요한 기능을 설명합니다.
동기화에는 다음과 같이 몇 가지 타입이 있습니다.
복제¶
먼저, 복사된 월드 각각에 보이는 개체는 모두 같아야 합니다. 이를 위해서는 한 클라이언트에서 생성된 개체가 다른 클라이언트에서도 생성되어야 하고 삭제된 개체는 모든 클라이언트에서 삭제되어야 합니다. 이 같은 동기화를 복제라고 합니다.
오리지널 개체를 만든 클라이언트를 그 개체의 소유자라고 합니다. (단, 이 소유권은 나중에 다른 클라이언트에게 양도할 수 있습니다.) 복제된 개체를 레플리카라고 합니다.
Strix에서는 StrixReplicator 요소가 복제를 처리합니다.
움직임¶
게임 월드에서는 수많은 물체가 움직이며 그 움직임 또한 동기화해야 합니다.
개체가 첫 장소에 있을 때 움직임을 제어할 책임은 방장에게 있습니다. Strix는 다른 클라이언트의 움직임을 동기화합니다. 움직임 동기화는 한 요소로도 처리되며, Strix에는 시나리오별로 움직임 동기화를 처리하는 요소가 몇 가지 있습니다.
그중에서
StrixMovementSynchronizer가 기능이 제일 많으며, 일반적인 게임 개체의 움직임을 대부분 처리할 수 있습니다.StrixTransformSynchronizer는 간편 버전으로, 간단한 움직임만 하는 개체에 적합합니다. 복잡한 움직임은 처리하지 못하지만, 오버헤드가 적어StrixMovementSynchronizer보다 빨리 작동합니다.StrixVehicleSynchronizer는 비히클 타입 개체에 특화된 것입니다.
애니메이션¶
일부 게임 개체, 특히 크리처는 애니메이션이 있어 마치 살아 있는 것 같습니다. 애니메이션은 클라이언트 간에 동기화해야 합니다.
Strix에서는 StrixAnimationSynchronizer가 이 임무를 맡습니다.
변수/속성¶
게임 개체에는 여러 가지 변수가 있습니다. 일반적으로는 이것을 속성이라고 합니다. 개체의 각 측면은 이 속성을 바꿔 제어합니다.
Unity 게임 개체에는 Transform 요소가 있으며, 그 속성을 바꾸면 개체가 움직입니다. StrixTransformSynchronizer의 동작은 그 속성의 동기화로 볼 수 있습니다. Strix의 동기화 요소는 적정 수준에서 표준 속성을 관리합니다.
그러나, 각자 게임 개체 안에는 게임을 지원하는 다른 속성도 있습니다. 이 커스텀 속성도 알맞게 동기화해야 합니다.
Strix는 개체 속 변수를 무엇이든 편리하게 동기화할 수 있습니다.
RPC¶
RPC는 remote procedure call(원격 프로시저 호출)의 약자로, 다른 클라이언트에서 개체의 메서드를 호출할 때 이용할 수 있습니다. RPC를 통하면 무엇이든 동기화할 수 있습니다. 대부분은 플레이어 인풋으로 인한 액션을 동기화합니다.