プロファイリング
はじめに
プロファイリングは、コード間の相対的なパフォーマンスを調べ、高負荷な場所を割り出すことができる優れたツールです。しかし、特にUnityのプロファイリングツールは、そのオーバヘッドがパフォーマンスに影響を与えるため、絶対的なパフォーマンス計測には役立ちません。
推奨されるパフォーマンス分析手順は次の通りです。
- シミュレーション時間やレンダリング時間を測定する場合、Quantumのリリースビルドと、Quantum Graph ProfilerのみをアタッチしたUnityのIL2CPPビルドを使用してください。
DeterministicConfig.ChecksumIntervalは0か高い値を設定してください。頻繁なチェックサムはパフォーマンスに影響を与えます。- 大まかな計測対象(シミュレーション側か、レンダリング側かなど)を決めて、Unity Profiler/Quantum Task Profilerを使用して、プロファイリングセッションを追跡調査します。
Quantumのデバッグビルドは、リリースビルドより5倍程度遅くなる可能性があります。「デバッグ + Mono」ビルドは、「リリース + IL2CPP」ビルドより10倍程度遅いです。
Unity Profiler
Quantumのパフォーマンス統計はUnity Profilerに統合されており、デフォルトではQuantumRunnerスクリプトから開始されます。
C#
Quantum.Profiling.HostProfiler.Init(..)
Quantumシミュレーションコード中で、Unity Profilerの独自セクションを追加できます。
C#
HostProfiler.Start("Foo");
{
HostProfiler.Start("Bar1");
// 何かを実行する
HostProfiler.End();
HostProfiler.Start("Bar2");
// 何かを実行する
HostProfiler.End();
}
HostProfiler.End();
Quantumは、UnityのTimeline Profilerのデータも提供します。プロファイリングデータは、Debug設定時のみ提供されます。
Quantum Task Profiler
Quantum Task Profilerは、独自にスタンドアロンで動作するグラフィカルなパフォーマンスプロファイラーで、UnityのTimeline Profilerに似ています。
デバッグ/リリースのどちらのQuantum DLLでも実行できます。
SessionRunner.Arguments.GameFlagsのQuantumGameFlags.EnableTaskProfilerから有効にすることができます。
- ローカルデバッグモードでTask Profilerを有効にするには、
QuantumRunnerLocalDebugゲームオブジェクトのIsTaskProfilerEnabledを切り替えます。 - または、QuantumMenuのオンラインモードを使用して、
QuantumMenuUIControllerゲームオブジェクトのQuantumMenuConnectArgs.EnableTaskProfilerを切り替えます。 - ゲームを開始します。
Tools > Quantum > Window > Task Profilerを開きます。Recordボタンを切り替えます。

リモートプロファイリング
Unity Profilerと同様に、リモート端末上で実行されているアプリケーションは、同じローカルネットワーク内でUDP経由でUnityエディターに接続します。
Unityエディターを実行している端末のファイアーウォールの設定で、UDPポート30000をブロックしていないこと、Unityエディターのすべての接続をブロックするルールを解除していることを確認してください。
リモートプロファイリングを有効にするには、QuantumEditorSettingsアセットを選択して、Enable Remove Task Profilerを切り替えてください。現在選択中のビルドプラットフォームのScripting Define SymbolsにQUANTUM_ENABLE_REMOTE_PROFILERが追加されます。これは、プロファイリング可能なビルドを作成するために使用されます。

Quantum Graph Profiler
Quantum Graph Profilerは、ゲームシーンに統合して、ゲームのパフォーマンスやネットワーク状態のグラフを表示できるツールです。このプロファイラーは、Quantum SDKのAssets\Photon\Quantum\Runtime\GraphProfilersにあります。
インストールするには、QuantumGraphPrefabProfilersプレハブをシーンにドラッグします。
リアルタイムプロファイリング
このランタイムのグラフは、ゲーム全体のパフォーマンスや、様々なネットワーク条件下のQuantumシミュレーションの追跡に役立ちます。グラフの値はUnityの更新レートに基づき、単一フレームの累積時間/累積カウントなどを表します。
このプロファイラーは、以下のグラフを提供します。
Engine Delta Time:Unityのフレーム間のTime.unscaledDeltaTimeになります。Engine Delta Timeが目標FPSを反映しない場合は、QualitySettings.vSyncCount = 0を設定して修正できます。Frame Time:Unityの内部処理とレンダリングを含むすべてのスクリプトロジックの時間です。WaitForEndOfFrameの時間は除外されます。User Scripts Time:FixedUpdate()+Update()+LateUpdate()の実行にかかった時間です。Render Time:LateUpdate()が実行されてからレンダリングが終了するまでの時間です。Simulation Time:QuantumRunner.Default.Game.Session.Stats.UpdateTimeと同じ時間です。Predicted Frames:Unityの1フレーム内にシミュレーションされたQuantum予測フレーム数で、QuantumRunner.Default.Game.Session.PredictedFramesと同じです。Verified Frames:Unityの1フレーム内にシミュレーションされたQuantum確定フレーム数です。Network Activity:サーバーから最後にデータを受信してからの経過時間です。Ping:ネットワークピアのラウンドトリップタイム(RTT)です。Markers:最大8つのブール値を、マーカーを使用して追跡できます。各マーカーはユニークな色で表され、デフォルトでは赤 = サーバーによって置換された入力、オレンジ = チェックサムが計算されたです。

マーカーについての備考
可読性を向上させるため、マーカーグラフは倍速で実行されます。これは、プロファイラープレハブのSamplesプロパティから調整できます。
複数のMarkersProfilerインスタンスがサポートされています。
MarkersProfiler profiler = MarkersProfiler.Get(GAMEOBJECT_NAME)から、名前でインスタンスを取得するprofiler.SetMarker(INDEX)を呼び出す
その他のツール
リアルタイムプロファイリングツールには、以下のような(より基本的な)ツールも含まれています。
- 目標FPS(
Application.targetFrameRate)を変更する - ネットワーク条件(ラグ・ジッター・パケットロス)をシミュレートする
これらは、異なるレンダリング速度や劣悪なネットワークを簡単にシミュレートするのに役立ちます。設定はすぐにグラフ(予測フレーム数・シミュレーション時間など)に反映されます。
注意: パケットロスをシミュレートする際は設定値に注意してください。ネットワーク上のロスのシミュレートには1~3%を、ローカルネットワーク上のロス(例:3つの壁で隔たれた先のルーターへの劣悪な接続)には高い値を使用してください。
Back to top