簡単オンラインゲーム開発!!UnityとPhotonCloudで簡単実装~オブジョクトの同期~

PhotonCloud

前回の記事では、同期するオブジョクトの生成を行ってもらいました。

今回は、オブジョクトの同期の方法を書いていこうと思います。

自分とそれ以外の判定

基本的にオブジョクトを動かすソースコードは、同じのを使います。

なので、何かで自分と他のオブジョクトを見分ける必要があります。

UnityChan2DControllerの編集

DemoUnityChan2Dに追加されている[UnityChan2DController.cpp]を編集します。

PhotonCloud_37

継承の変更

 

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を追加をします。

PhotonCloud_28

Photon Viewに追加

そして、Photon Transform ViewをPhoton Viewに追加します。

PhotonCloud_29

わかれにくいかもしれませんが、[Photon Transform View]の上辺りをクリックしながら[Photon View]のところにドラッグアンドドロップしてください。

PhotonCloud_30

このように変更されれば大丈夫です。

Positionの同期

Positionの同期からやりましょう。

PhotonCloud_31

[Photon Transform View]の赤枠部分のところをクリックしてください。

PhotonCloud_32

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に同期座標が描画される

という意味です。

とりあえず、同期させて動かすだけなら下記画像のように設定してください。

変更箇所

PhotonCloud_44

 

動作確認

ここで一度、動作を確認してみましょう。

前回のように、1つはBuildをして実行ファイルを作成して実行、そしてUnity上でも実行をして2つ実行して、動作を確認してください。

自分が生成したオブジョクトだけ動くと思います。

まとめ

今回で、PhotonCloudで同期したもので自分のオブジョクトだけが動くようになりました。

ただ、まだアニメーションが同期されていません。

次回は、アニメーションの同期方法を書いていきます。

では。

ユニティちゃんライセンスこのアセットは、『ユニティちゃんライセンス』で提供されています。このアセットをご利用される場合は、『キャラクター利用のガイドライン』も併せてご確認ください。

コメント

タイトルとURLをコピーしました