This document is about: QUANTUM 3
SWITCH TO

Profiling

簡介

效能分析通常是一個很好的工具,可用於找出程式碼各部分之間的 相對 效能差異,並讓開發者能夠深入挖掘效能瓶頸。但它對尋找絕對效能指標沒有用處,因為效能分析工具(尤其是 Unity 的工具)其本身的開銷會影響效能。

建議的效能分析路徑如下:

  1. 使用附加的 Quantum 圖表分析器(Quantum Graph Profiler),透過 Quantum Release 建置(Quantum解決方案)和 IL2CPP Unity 建置來測量模擬時間、渲染時間等,以獲取隨時間變化的整體數據;
  2. 確保將DeterministicConfig.ChecksumInterval設定為零或較高的值,因為頻繁的校驗和會影響效能;
  3. 然後,在大致了解需要關注的方向後(例如是模擬部分、渲染部分等),使用 Unity 分析器或 Quantum 任務分析器進行後續的效能分析會話。

請注意,Quantum 的除錯(debug)建置可能比釋放(release)建置慢 5 倍。此外,除錯 + mono 建置可能比釋放 + il2cpp 建置慢 10 倍。

Unity 分析器

Quantum 效能統計已整合到 Unity 分析器中,並且在 QuantumRunner 指令碼中預設啟動。

C#

Quantum.Profiling.HostProfiler.Init(..)

你可以透過以下常見的 Unity 分析器模式,在 Quantum 模擬程式碼中添加自定義區段:

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 的時間軸分析器提供數據。Quantum 僅在Debug配置中提供效能分析數據。

Quantum任務分析器

Quantum 任務分析器是一個自定義的獨立圖形化效能分析器,用於 Unity,類似於 Unity 時間軸分析器。它可以在選擇除錯或釋放版本的 Quantum DLL 時運行。

要啟用它,請在SessionRunner.Arguments.GameFlags上設定QuantumGameFlags.EnableTaskProfiler

  • 在本機除錯模式下,切換QuantumRunnerLocalDebug遊戲物件上的IsTaskProfilerEnabled以啟用任務分析器
  • 或者在 QuantumMenu 線上模式中,透過QuantumMenuUIController遊戲物件切換QuantumMenuConnectArgs.EnableTaskProfiler
  • 啟動遊戲
  • 打開Tools > Quantum > Window > Task Profiler
  • 點擊Record按鈕

與 Unity 分析器類似,運行在遠端設備上的應用程式會透過 UDP 連接到 Unity 編輯器,且需處於 同一 區域網路內。

Quantum Task Profiler
Quantum任務分析器

遠端分析

可以遠端連接到運行在與編輯器相同網路中的 Quantum 任務分析器(UDP 連接埠 30000)。要啟用此功能,只需在QuantumEditorSettings資產底部勾選Remote Profiler核取方塊。然後關閉並重新打開任務分析器視圖。

Profiling Graphs
在 QuantumEditorSettings 中切換遠端分析器

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 = input replaced by server and Orange = checksum calculated
Profiling Graphs
即時分析圖表

關於標記的注意事項

為了提高可讀性,標記圖表的運行速度是其他圖表的 2 倍。這可以透過分析器預製體上的Samples屬性進行調整。

支援多個MarkersProfiler實例:

  1. 透過名稱獲取實例:MarkersProfiler分析器 = MarkersProfiler.Get(GAMEOBJECT_NAME);
  2. 呼叫profiler.SetMarker(INDEX);

其他工具

即時分析工具還包含其他(更基本的)工具,用於:

  • 更改目標FPS (Application.targetFrameRate);以及
  • 模擬網路條件(延遲、抖動、丟包)。

這些工具可用於快速模擬不同的渲染速度和不良的網路狀況。其效果可以立即在圖表中看到(預測幀、模擬時間等)。

注意: 擬網路丟包時,請謹慎設定數值。使用 1-3% 來模擬網路上的丟包,使用更高的數值來模擬本地丟包(例如,與隔著 3 堵牆的路由器連接不良)。

Back to top