アマゾンバナーリンク

ディスプレイ広告

スポンサーリンク

PhotonCloudPUN2でカクつかないブレないエラーが出ない同期のコツ

2020年12月17日

こんにちは!ジェイです。毎日オンラインゲーム制作頑張ってます!特に最近は車の同期をするのに、必死にプログラミングをしていて、気づいた同期について説明します。

この記事を見るとオンラインゲーム制作で、PhotonCloudPUN2を使った時に、キャラクターや車をヌルヌル動かす方法がわかります。

記事内広告

同期する手段の種類

PhotonCloudPUN2の同期のする手段は大きく分けて以下の物があります。

  • ルームプロパティ
  • プレイヤープロパティ
  • リモートプロシージャーコール(RPC)
  • PhotonTransformView
  • PhotonTransformViewClassic
  • PhotonSerializeView
  • PhotonAnimtorView

ルームプロパティ

ルーム1つに対しての同期の設定で、部屋の最高人数を設定したり、その部屋内で共有するデータをHashtableを使うことで同期することができます。

プレイヤープロパティ

プレイヤー1人ずつに対して設定する変数を同期する事ができます。こちらもHashtableを使います。

リモートプロシージャーコール(RPC)

自分が実行した関数を他のプレイヤーにも同じ関数を実行させられます。使う時には必ずPhotonViewコンポーネントが必要です。

PhotonTransformView

位置と回転とScaleの同期を毎ループ行ってくれます。それぞれチェックを入れた項目のみ同期されます。

PhotonAnimtorView

その名の通りアニメーションの同期をしてくれます。

適切な同期の選び方

まずUnityで物を動かそうとした時にとれる手段は以下の通りです。

  • Transform.positionやrotationを直接いじる
  • Transform.Translateメソッドで移動させる
  • CharactorController.Moveで移動させる
  • RigidbodyのAddForceを使う

CharactorControllerを使うにはCharactorControllerコンポーネントが必要で、Rigidbodyを使う時はRigidbodyコンポーネントが必要です。

CharactorControllerを使う場に1番良い方法

結論からいうと、PhotonViewClassicをSynchronize Valuesを使う事によって、リアルタイム制の高いアクションゲームでもヌルヌル同期できます。

CharactorControllerは自キャラを動かす時に使います。Rigidbodyと併用もできますが、ここではしない事を前提で話を進めます。PhotonViewClassicは以前のバージョンのPUNの時のPhotonViewとほとんど同じ仕様です。

  1. CharactorControllerとPhotonViewとPhotonViewClassicをアタッチする
  2. PhotonViewのInterpolateとExtrapolateをSynchronize Valuesを設定
  3. スクリプト内でCharactorController.Moveに計算した移動量を渡す

詳しくは以下を参照

Transform.PositionやRotationを直接いじる場合やTransform.Translateメソッド使う場合も、リアルタイム性の高いアクションゲームなどはこの設定が同期の精度が1番高いです。

Rigidbodyを使う時に1番良い方法

これも結論からいうと、RigidbodyにInterpolateをInterpolateにして、PhotonRigidBodyViewのSynchronize VelocityとSynchronize Angular Velocityにチェックを入れる方法です。

Rigidbody
Photon Rigidbody View

それとRigidbodyを使う時には、オンライン上の同期だけでなく、オフラインの時でもカメラの処理をLateUpdateに書くのとInterpotateをInterpotateに設定すると、カクつきを低減できるので、必ず覚えておきましょう。

理由は以下参照

そして、最後に注意する点は、PhotonRigidbodyViewとPhotonTransformViewClassicは同時に付けない方が安定するようです。ここまでできると以下のようにスムーズに同期することができます。

アイキャッチ画像はもこさん作です。素敵な画像をありがとうございました。