プロファイリング
はじめに
プロファイリングは、コード間の相対的なパフォーマンスを調べ、高負荷な場所を割り出すことができる優れたツールです。しかし、特に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エディターに接続します。

リモートプロファイリング
エディターと同じネットワーク上で実行されているビルドに、Quantum Task Profilerをリモートで接続する(UDPポート30000)ことが可能です。この機能を有効にするには、QuantumEditorSettings
アセット下部のRemote Profiler
チェックボックスを切り替えます。その後、Task Profiler Viewを一度閉じて再度開いてください。

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