変数の複製¶
複製で述べたように、変数を同期する方法は2通りあります。
注釈
どちらの方法を用いるにせよ、クラスはStrixBehaviour
を継承している必要があり、またスクリプトをアタッチするGameObject
にはStrixReplicator
コンポーネントをアタッチしておく必要があります。
同期フィールド¶
変数をクラスのインスタンスフィールドにしておき、それにStrixSyncField
属性を付与することができます。StrixReplicator
は自動的に、この印の付いたフィールドの値を、オーナーであるクライアントのオリジナルのオブジェクトから他のクライアントのレプリカに同期します。フィールドはシリアル化可能である必要があります。
[StrixSyncField]
public int MyValue = 10;
[StrixSyncField]
public int MySecondValue= 7;
これはオブジェクト内部の変数を同期する手軽な方法ですが、これらのフィールドを同期するためにStrix Unity SDKはリフレクションを利用するので、あまり性能が良くないという点に注意してください。
シリアル化用メソッド¶
フィールドの値の読み書きをリフレクションに頼る代わりに、OnStrixSerialize
とOnStrixDeserialize
という2つのメソッドをオーバーライドし、適切な文字列か整数のキーを使って自分で値を読み書きすることができます。
public int MyValue = 10;
public int MySecondValue = 7;
public override void OnStrixSerialize(StrixSerializationProperties properties)
{
base.OnStrixSerialize(properties);
properties.Set("MyValue", MyValue);
properties.Set(-1, MySecondValue);
}
public override void OnStrixDeserialize(StrixSerializationProperties properties)
{
base.OnStrixDeserialize(properties);
properties.Get("MyValue", ref MyValue);
properties.Get(-1, ref MySecondValue);
}
注釈
StrixSerializationProperties
のプロパティキーは、複製されるプロパティの識別子として働きます。
個々のプロパティを表すキーの値は (それが文字列であれ整数であれ) 一意にする必要があります。別のプロパティが同じキーを使用すると (同じGameObject
にアタッチされていれば、それらが別のクラスのプロパティであっても)、変数同期は思ったように機能しなくなり、Strix Unity SDKが例外をスローします。
整数のキーを使用する場合は、キーとして負の値 (0より小さい値) を使用してください。STRIXは内部的に、正の整数のキーを自身のために使用しているためです。
同期送信頻度¶
どちらの場合も、sendRate
の値に応じた一定の時間間隔で、同期が自動的に起動されます。sendRate
の値は、1秒間に同期が実行される回数です。また、GameObjectかスクリプトが無効になっているときには同期は実行されません。