Profiling
簡介
效能分析通常是一個很好的工具,可用於找出程式碼各部分之間的 相對 效能差異,並讓開發者能夠深入挖掘效能瓶頸。但它對尋找絕對效能指標沒有用處,因為效能分析工具(尤其是 Unity 的工具)其本身的開銷會影響效能。
建議的效能分析路徑如下:
- 僅 使用附加的 Quantum 圖表分析器(Quantum Graph Profiler),透過 Quantum Release 建置(Quantum解決方案)和 IL2CPP Unity 建置來測量模擬時間、渲染時間等,以獲取隨時間變化的整體數據;
- 確保將
DeterministicConfig.ChecksumInterval設定為零或較高的值,因為頻繁的校驗和會影響效能; - 然後,在大致了解需要關注的方向後(例如是模擬部分、渲染部分等),使用 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 任務分析器(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 = input replaced by serverandOrange = checksum calculated。
關於標記的注意事項
為了提高可讀性,標記圖表的運行速度是其他圖表的 2 倍。這可以透過分析器預製體上的Samples屬性進行調整。
支援多個MarkersProfiler實例:
- 透過名稱獲取實例:
MarkersProfiler分析器 =MarkersProfiler.Get(GAMEOBJECT_NAME); - 呼叫
profiler.SetMarker(INDEX);
其他工具
即時分析工具還包含其他(更基本的)工具,用於:
- 更改目標FPS (
Application.targetFrameRate);以及 - 模擬網路條件(延遲、抖動、丟包)。
這些工具可用於快速模擬不同的渲染速度和不良的網路狀況。其效果可以立即在圖表中看到(預測幀、模擬時間等)。
注意: 擬網路丟包時,請謹慎設定數值。使用 1-3% 來模擬網路上的丟包,使用更高的數值來模擬本地丟包(例如,與隔著 3 堵牆的路由器連接不良)。
Back to top