変数の複製

複製で述べたように、変数を同期する方法は2通りあります。

注釈

どちらの方法を用いるにせよ、クラスはStrixBehaviourを継承している必要があり、またスクリプトをアタッチするGameObjectにはStrixReplicatorコンポーネントをアタッチしておく必要があります。

同期フィールド

変数をクラスのインスタンスフィールドにしておき、それにStrixSyncField属性を付与することができます。StrixReplicatorは自動的に、この印の付いたフィールドの値を、オーナーであるクライアントのオリジナルのオブジェクトから他のクライアントのレプリカに同期します。フィールドはシリアル化可能である必要があります。

[StrixSyncField]
public int MyValue = 10;

[StrixSyncField]
public int MySecondValue= 7;

これはオブジェクト内部の変数を同期する手軽な方法ですが、これらのフィールドを同期するためにStrix Unity SDKはリフレクションを利用するので、あまり性能が良くないという点に注意してください。

シリアル化用メソッド

フィールドの値の読み書きをリフレクションに頼る代わりに、OnStrixSerializeOnStrixDeserializeという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かスクリプトが無効になっているときには同期は実行されません。