This document is about: PUN 1
SWITCH TO

PUN Classic (v1)、PUN 2、Boltはメンテナンスモードとなっております。Unity2022についてはPUN 2でサポートいたしますが、新機能が追加されることはありません。お客様のPUNプロジェクトおよびBoltプロジェクトが停止することはなく、将来にわたってパフォーマンス性能が落ちることはありません。 今後の新しいプロジェクトについては、Photon FusionまたはQuantumへ切り替えていただくようよろしくお願いいたします。

最適化のヒント

制限とキャッシュコールバックターゲット

便宜上、PUNコールバックは任意のMonoBehaviourおよび任意のGameObjectで実装することができます。
これらのコールバックの頻度は低いため、通常は問題にはなりません(カスタムプロパティの更新を除く)。

内部的にはUnityのSendMessageはコールバックをディスパッチに使用され、それがパフォーマンスに影響する可能性があります。
さらに大きな問題としては、コンポーネントを見つけるためにFindObjectsOfType()が必要であるということです(これはコールバックを実装、または実装しない可能性があります)。

PhotonNetwork.SendMonoMessageTargetsを使用すると、どのGameObjectが呼び出されるかを定義できます。
PhotonNetwork.CacheSendMonoMessageTargets(Type t)では、どのタイプのコンポーネントをターゲットにするかを定義することでSendMonoMessageTargetsを設定できます。

必要に応じてSendMonoMessageTargetsを更新することができます。
デフォルトの強引なアプローチよりも高速に処理がおこなえます。

OnPhotonSerializeViewとIPunObservable

デフォルトでは、PhotonViewはリフレクションとキャッシングを使用して、コンポーネント上のOnPhotonSerializeView実装を見つけて呼び出します。

MonoBehavioursで IPunObservableインタフェースを実装することで、OnPhotonSerializeViewの呼び出しを最適化できます。

RPCターゲットをキャッシュ

場合によっては、ゲームで多くのRPCを使用することがあります。
ターゲットGameObject上のどのコンポーネントもRPCを実装できるため、PUNはリフレクションを使用して適切なメソッドを見つけます。
もちろんコンポーネントが変更されない場合には、これは負荷がかかり無駄なことになります。

デフォルトでは、PUNはスクリプトのタイプごとにMethodInfoリストをキャッシュします。
PUNは、GameObject上で潜在的なターゲットであるMonoBehavioursはキャッシュしません。

PhotonNetwork.UseRpcMonoBehaviourCache = trueを設定して、RPC用のPhotonViewごとのMonoBehavioursをキャッシュすることができます。
これにより、呼び出すコンポーネントの検索が高速化されます。
GameObjectのスクリプトが変更された場合は、必要に応じてphotonView.RefreshRpcMonoBehaviourCache()を呼び出して必要に応じて更新してください。

RaiseEventのローカルログを回避

RaiseEventを呼び出す場合、データは即時でソケットには書き込まれません。その代わりに、SendOutgoingCommands()が呼び出されるまでデータは待ち行列に入れられます。

ローカルラグを回避するには、RaiseEventをトリガーにしてLateUpdate()SendOutgoingCommands()を呼び出します。
これは、必要に応じて実行すれば十分です。

Back to top