今記事は以下の記事のオブジェクト同期編です。
まだメインの記事を読んでない方はそちらから読んでいただけると幸いです。
Strix Cloudにおけるオブジェクト同期までを解説していきたいと思います。
##変数の同期
変数を同期するにはMonoBehaviour
の代わりにStrixBehaviour
を継承させたコンポーネントで同期します。
また、変数を同期する方法は2つあります。
###StrixSyncField 属性を付ける
[StrixSyncField]
public int hp = 100;
[StrixSyncField]
public bool isAlive = true;
シリアル化可能なフィールドであれば、変更がすべての所有者で自動的に同期されます。
###シリアル化メソッドを利用する
public int hp = 100;
public bool isAlive = true;
//フィールドをシリアライズする(ローカルでのみ実行)
public override void OnStrixSerialize(StrixSerializationProperties properties)
{
base.OnStrixSerialize(properties);
properties.Set(0, hp); //properties.Set(変数の識別ID, 同期したいフィールド)
properties.Set(1, isAlive);
}
//フィールドをデシリアライズする(リモートでのみ実行)
public override void OnStrixDeserialize(StrixSerializationProperties properties)
{
base.OnStrixDeserialize(properties);
properties.Get(0, ref hp); //properties.Get(変数の識別ID, 同期したいフィールドを参照渡し)
properties.Get(1, ref isAlive);
}
特徴としては、フィールドに識別IDを付ける部分です。
PUN2では必ず送信順に受信する必要がありましたが、Strixでは順番は関係ありません。
順番を間違えてバグの温床になったりしていたのでこれはありがたいですね。
##Transform & Animator の同期
上の変数を同期する方法で座標も同期できるので基本的に説明は省きますが、
Strix側でTransformとAnimatorを同期できるコンポーネントが用意されてます。
StrixMovementSynchronizer
StrixAnimationSynchronizer
StrixMovementSynchronizer
は細かく設定できますが、結構面倒なので少し微妙です。
シンプルなPUN2のPhotonTransformView
のStrix版をGitHubに上げたので、そちらも参考にしてみてください。
次回はStrixにおけるRPC & MessageRelayを解説します!
【Strix】PhotonからStrix Cloudに移行してみた ~RPC & MessageRelay編~
##参考リンク
変数の同期