プロファイリング
はじめに
プロファイリングは、コードの部分間の相対的なパフォーマンスを見つけ、開発者がホットスポットを詳細に調査できる優れたツールです。しかし、プロファイリングツール、特にUnityのものはオーバーヘッドによりパフォーマンスに影響を与えるため、絶対的なパフォーマンス測定を見つけるのには役立ちません。
推奨されるパフォーマンス分析の手順は次のとおりです:
- Quantumのリリースビルド(quantumソリューション)とIL2CPP Unityビルドを使用して、シミュレーション時間、レンダリング時間などを測定し、全体的な数値を得るためにQuantum Graph Profilerを付加します。
DeterministicConfig.ChecksumInterval
にゼロまたは高い値を設定することを確認します。頻繁なチェックサムはパフォーマンスに影響を与えます。- その後、どこを見ればいいのか(シミュレーションか、レンダリングかなど)大まかなアイデアを持って、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");
// do work
HostProfiler.End();
HostProfiler.Start("Bar2");
// do work
HostProfiler.End();
}
HostProfiler.End();
最新のQuantum SDKバージョン(2.1)では、QuantumはUnityのTimelineプロファイラー向けのデータも提供します。Quantumは、Debug
設定のときのみプロファイリングデータを提供します。
Quantumタスクプロファイラー
Quantumタスクプロファイラーは、UnityのTimelineプロファイラーに類似したカスタムのスタンドアロングラフィカルパフォーマンスプロファイラーです。デバッグまたはリリース版のQuantum DLLが選択された状態で実行できます。
これを有効にするには、SessionRunner.Arguments.GameFlags
の QuantumGameFlags.EnableTaskProfiler
を設定します。
QuantumRunnerLocalDebug
ゲームオブジェクトのIsTaskProfilerEnabled
を切り替え、ローカルデバッグモードでタスクプロファイラーを有効にします。- または、QuantumMenuのオンラインモードを使用して
QuantumMenuUIController
ゲームオブジェクト内のQuantumMenuConnectArgs.EnableTaskProfiler
を切り替えます。 - ゲームを開始します。
Tools > Quantum > Window > Task Profiler
を開きます。Record
ボタンを切り替えます。
Unity Profilerと同様に、リモートデバイス上で実行されているアプリは、同じローカルネットワーク内でUDPを介してUnityエディターに接続します。

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

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

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