複製と同期の概要¶
Strixでは、各クライアントがゲームワールドのコピーを持っています。プレイヤーが共有ゲームワールドを体験できるように、それらのコピーは同一のものに維持しなければなりません。これを同期と呼びます。
Strixは、ゲームワールド内のオブジェクトとそのプロパティの同期をリアルタイムで実行できます。ここでは同期機能を説明します。
同期にはいくつかの種類があります。
複製¶
最初に、ワールドの全てのコピーは同じオブジェクトの集合を含んでいなければなりません。そのためには、あるクライアントで作成したオブジェクトは他のクライアントでも作成しなければならず、削除したオブジェクトは全てのクライアントで削除しなければなりません。この種の同期を複製と言います。
オリジナルのオブジェクトを作成したクライアントのことを、そのオブジェクトのオーナーと言います(ただし、オーナーは後で他のクライアントに移譲されることがあります)。複製されたオブジェクトをレプリカと言います。
Strixでは、複製はStrixReplicator
コンポーネントが担当します。
移動¶
多数のゲームオブジェクトがワールド内で移動しますが、それらの移動も同期しなければなりません。
そのオブジェクトを最初に動かすのはオーナーの責任ですが、他のクライアントにその移動を同期することはStrixが行います。移動同期もコンポーネントが担当しますが、Strixでは異なる用途に応じて移動同期を行うコンポーネントをいくつか用意しています。
StrixMovementSynchronizer
は最も適用範囲が広いコンポーネントで、典型的なゲームオブジェクトのほとんどの動きに対応できます。StrixTransformSynchronizer
は軽量版のコンポーネントで、単純な動作しか行わないようなオブジェクトに適しています。複雑な動きを扱うことはできませんが、StrixMovementSynchronizer
よりも少ないオーバーヘッドで高速に動作します。StrixVehicleSynchronizer
は乗り物タイプのオブジェクトに特化したコンポーネントです。
アニメーション¶
ゲームオブジェクトの中には、生き生きとリアルに見えるようにアニメーションを持っているものがあります。それらのアニメーションもクライアント間で同期する必要があります。
Strixでは、この仕事はStrixAnimationSynchronizer
が行います。
変数/プロパティ¶
ゲームオブジェクトは内部に多数の変数を持っていますがそれらは一般にプロパティと呼ばれています。それらのプロパティを変化させることでオブジェクトのさまざまな側面をコントロールします。
UnityのゲームオブジェクトにはTransform
コンポーネントがありますが、そのプロパティを変更するとオブジェクトが移動することになります。StrixTransformSynchronizer
の動作は、それらのプロパティの同期と考えることもできます。Strixの同期コンポーネントは、標準のプロパティの適切な集合を同期させます。
しかし、ゲームオブジェクトの中には、他にもそのゲームに特有の役割を果たすためのプロパティがあるはずです。それらのカスタムプロパティも適切に同期する必要があります。
Strixでは、オブジェクトの中にある変数を手軽に同期するための方法を提供します。
RPC¶
RPCという言葉はremote procedure call(遠隔手続き呼び出し)の略で、他のクライアント上でメソッドを呼び出すことができるようにします。RPCを使えば何でも同期することができますが、典型的にはプレイヤーの入力に応じて起きるアクションの同期に用います。