前回の記事では、同期するオブジョクトの生成を行ってもらいました。
今回は、オブジョクトの同期の方法を書いていこうと思います。
目次
自分とそれ以外の判定
基本的にオブジョクトを動かすソースコードは、同じのを使います。
なので、何かで自分と他のオブジョクトを見分ける必要があります。
UnityChan2DControllerの編集
DemoUnityChan2Dに追加されている[UnityChan2DController.cpp]を編集します。
継承の変更
public class UnityChan2DController : MonoBehaviourから
public class UnityChan2DController : Photon.MonoBehaviourに変更します。
PhotonCloudで使うオブジョクトは、Photon.MonoBehaviourを継承します。
Update()の変更
Update()関数を下記のように変更します。
変更前
void Update() { if (photonView.isMine) { if (m_state != State.Damaged) { float x = Input.GetAxis("Horizontal"); bool jump = Input.GetButtonDown("Jump"); Move(x, jump); } } }
変更後
void Update() { if (photonView.isMine) { if (m_state != State.Damaged) { float x = Input.GetAxis("Horizontal"); bool jump = Input.GetButtonDown("Jump"); Move(x, jump); } } }
if (photonView.isMine) を追加しました。
PhotonCloud上で、自分が生成したオブジョクトなら[photonView.isMine]がtrueそうでなければ、falseを返します。
これで、自分のオブジョクトとその他オブジョクトの切り分けが出来ました。
Transformの同期
まずは、Transformの同期を行います。
Transformは、positionやrotationの事です。
Transformを同期すれば、オブジョクトを移動させると自分以外のプレイヤー画面でもオブジョクトが移動するようになります。
DemoUnityChan2DにPhoton Transform Viewの追加
まずは、DemoUnityChan2DにPhoton Transform Viewを追加をします。
Photon Viewに追加
そして、Photon Transform ViewをPhoton Viewに追加します。
わかれにくいかもしれませんが、[Photon Transform View]の上辺りをクリックしながら[Photon View]のところにドラッグアンドドロップしてください。
このように変更されれば大丈夫です。
Positionの同期
Positionの同期からやりましょう。
[Photon Transform View]の赤枠部分のところをクリックしてください。Positionの部分が展開されました。
・Enable teleport for greater distances 大きく同期がズレた場合、テレポートを有効にしますか
Onにすると、同期ズレが大きくなったオブジョクトをテレポートさせて強制的に座標を上書きしてくれます。
・Teleport if distance greater than ○以上の場合、テレポートをします。
入力された数値より距離が離れたらテレポートされます。
・Interpolate Option [オプション補間]
設定するとオブジョクトの動きがなめらかになる。
- Disable[無効]
- Fixed Speed[固定速度]
- Estimated Speed[推定速度]
- Synchronize Values[値を使って同期] スクリプト側で直接値を設定して、同期します。
- Lerp [線形補間]
・Extrapolate Option [オブジョクト補外]
未来の座標を予測して、オブジョクトの動きを読み同期ズレを低減する
- Disable[無効]
- Rotate Towards
- Lerp [線形補間]
・Draw synchronized position error [同期位置誤差の表示]
ONにするとSceneViewに同期座標が描画される
という意味です。
とりあえず、同期させて動かすだけなら下記画像のように設定してください。
変更箇所
動作確認
ここで一度、動作を確認してみましょう。
前回のように、1つはBuildをして実行ファイルを作成して実行、そしてUnity上でも実行をして2つ実行して、動作を確認してください。
自分が生成したオブジョクトだけ動くと思います。
まとめ
今回で、PhotonCloudで同期したもので自分のオブジョクトだけが動くようになりました。
ただ、まだアニメーションが同期されていません。
次回は、アニメーションの同期方法を書いていきます。
では。
コメント