This document is about: FUSION 2
SWITCH TO

最適化

CPUパフォーマンス最適化

オブジェクトプール

デフォルトでは、ネットワークオブジェクトをスポーン/デスポーンする際に、FusionはUnityゲームオブジェクトのインスタンスを生成/破棄します。これは、CPU負荷が高い操作で、メモリ割り当てが発生します。

そのため、独自のNetworkObjectProviderを使用して、NetworkObjectインスタンスをプールすることを推奨します。

詳細な情報は、ドキュメントページサンプルをご覧ください。

ティックレート

ホスト(サーバー)モードでは、NetworkProjectConfigからティックレートを下げることで、ゲームプレイコードのCPU使用量を抑えることができます。SendRateの値は、CPUパフォーマンスには大きな影響を与えません。

メモリ最適化

Fusionは、大量のネイティブメモリをヒープに事前割り当てします。このヒープサイズはNetworkProjectConfigで設定できます。ヒープの合計サイズはPageCount * PageShiftになります。ヒープは、メモリ内の各ネットワークフレームに割り当てられます。このネットワークステートは補間に使用されるため、常に複数のヒープが割り当てられていることになります。

ネットワークステートが小さいアプリケーションの場合は、安全にメモリを削減することができます。PageCountPageShiftを徐々に減らしながら、現実的なシナリオでゲームをテストしましょう。Fusionのメモリが不足すると、OutOfMemoryExceptionが発生します。(PageShiftは16kb以上にすることを推奨します)

TargetFrameRate

サーバーでは、必ずTargetFrameRateを設定してください。そうしないと、UnityはCPUを100%使用して可能な限り高いFPSで実行されます。Fusionはゲームプレイシミュレーションを固定ティックレートのFixedUpdateNetworkで実行するため、これにはまったくメリットがありません。

Application.TargetFrameRateをFusionのティックレートに合わせる最も簡単な方法は次の通りです。

Application.targetFrameRate = TickRate.Resolve(NetworkProjectConfig.Global.Simulation.TickRateSelection).Server;

帯域幅の最適化Bandwidth Optimization

帯域幅の最適化は、様々な理由から重要です。

  1. 帯域幅使用料金が減るため、アプリケーション費用が削減できます。
  2. より多くのプレイヤーが、ネットワーク関連のトラブルなしにゲームをプレイできます。
  3. Fusionの結果整合性の転送アルゴリズムは、パケットのスナップショットサイズがMTU(Maximum Transmission Unit ~1280 bytes)より小さい場合に、最も効率的に動作します。

インタレストマネジメント

インタレストマネジメントは、帯域を劇的に削減する最良の方法です。これは、ホスト/サーバーモードでも共有モードでも動作します。

  • Area of Interestによって、オブジェクトに近いプレイヤーのみに状態を送信できます。
  • Interest Management アドオンは、プレイヤーのArea of Interestの形状をさらに最適化する実践的なツールを提供しています。
  • Explicit Object Interestによって、帯域消費が激しいオブジェクトを調整できます。

送信レート

NetworkProjectConfigでFusionの送信レートを下げると、2/4/8ティックおきにネットワークで状態を送信するようになります。送信レートの削減は、ゲームプレイシミュレーション(例:物理)の質に影響を与えずに、帯域幅を削減する良い方法です。

文字列の回避

RPCやネットワークプロパティで、文字列の使用(特にjson・xml・その他の類似フォーマット)を避けてください。
かわりに独自のINetworkStructを使用して、データをバイト効率が良い構造で表現してください。

信頼性のあるストリーミングAPI

大きなデータをRPCで送信することは避けて、かわりにデータストリーミングAPIを使用してください。データストリーミングの使用方法については、このページをご覧ください。

Back to top