unity & photonで動きがカクカクする

unity&photonで簡単なマルチプレイゲームを作ろうとした際、カクつくことがあったのでメモ

マルチプレイ用の処理の書き方についてはこのチュートリアルを順番に見ていけばよくわかる

イントロダクション | Photon Engine

オブジェクトの同期については特にこの辺

7-プレイヤーネットワーキング | Photon Engine

位置の補間についての設定はこちらのqiitaがわかりやすかった

【PhotonCloud】 PhotonTransformViewでTransformの同期を行う - Qiita

これらを見つつオブジェクトの同期まわり一通り実装して動かしてみたのだが、かなりカクカクした動きになっていた。 原因がわかってみるととても簡単な話だったが、気づくまでに意外と時間がかかったのでメモしておく

問題は以下の2つ

  1. ホストとゲストで行動の開始タイミングに体感でわかるほどのラグがある
  2. オブジェクトの移動時に明らかにカクつく

まず1.については、接続先の設定がデフォルトのままのためだった。
デフォルトの接続先regionはEUとなっており、round trip timeが無駄に大きかった。(300msくらい) JPに設定したら20ms程度になった。ちなみにround trip timeなどはこちらの方法で確認できる。

Photon Unity Networkingの便利な機能のご紹介 – Photon

2.についてはなかなか気づけなかったのだが、Enable teleport for greater distancesの設定値の問題だった。(詳細は上記のqiitaで解説されている)
ホストとゲストのオブジェクトの位置が、ここの設定値より大きくなった場合に強制的に位置が合わされることになる。

デフォルトの設定は3程度の値になっていたのだが、私が使っていたアセットがとても大きく各座標軸方向のサイズが50以上あるようなオブジェクトだった。そのため、オブジェクトの一動作で毎回しきい値以上の移動が発生し、常にワープしている状態となっていた。

わかってしまえば単純な問題だったが意外と気づくのに苦労したので、こういうこともあるという備忘録でした。