這個示例展示了如何使用微處理器找到體驗中的問題,並識別根本原因。下載體驗, 從樣本文件 在 Studio 中開啟,然後跟隨。
識別問題
在 Studio 中開啟體驗後,使用 F5 或 播放 按鈕來測試。
圖像 速度感覺很好,但不像應該的那麼平滑。 導航到 檢視 標籤,然後單擊摘要在1>統計1>下。
注意,幀率小於 60 幀/秒 (FPS)。
按下 CtrlAltF6 ( ⌘1> ⌥1> 3> F63> ) 來開啟微處理器。
注意, 畫框時間是一致的 — 畫條大概相同的高度—所以導致低畫框率的原因是每個畫框執行單個畫框而不是每次導致框架時間延遲。
按下 CtrlP (⌘P) 暫停微處理器。按下滑鼠快捷鍵會打開 2>詳細模式2>。
單擊並拖曳圖形。注意一個特定的任務在工作者線程中使用大量處理時間,相較於主執行緒。將鼠標放在 RunService.Stepped 上,並注意它所需的時間來成像。
在時間條中堆疊的條狀表示代碼階層,因此請保持在下層和下層移動,以嘗試找到問題。
注意 LocalScript 標籤,表示指令碼的名稱,並且 Raycast 標籤,表示可能與雷射投射有關。
創建問題標籤
現在微處理器提供了一個開始點,您可以排查問題的代碼。
停止播放測試並過濾 Explorer 窗口,以尋找 localscript 檔案。
搜尋結果指出這個部分代碼可能是導致這個體驗糟糕性履約的原因:raycast
local RAYS_PER_SECOND = 1500local function onStepped()for _ = 1, RAYS_PER_SECOND dolocal startPosition = getRandomPosition()local endPosition = getRandomPosition()local direction = endPosition - startPositionWorkspace:Raycast(startPosition,endPosition)endendRunService.Stepped:Connect(onStepped)更具體地,您可以看到代碼正在隨機方向施放 1,500 個射線。
要確認這個部分的代碼是否導致延遲,請將 debug.profilebegin() 和 debug.profileend() 包含在功能中:
local function onStepped()debug.profilebegin("Raycast Spam")for _ = 1, RAYS_PER_SECOND dolocal startPosition = getRandomPosition()local endPosition = getRandomPosition()local direction = endPosition - startPositionWorkspace:Raycast(startPosition,endPosition)enddebug.profileend()end
確認和修復問題
開始測試體驗,然後再次打開微型分析器。
注意微處理器現在會顯示自訂標籤,表示此功能確實是根因。
停止遊戲測試。
刪除或評論 onStepped() 函數和 RunService.Stepped:Connect(onStepped) 連接。
再次開始測試體驗,並重新檢查測試結果。
注意微處理器圖形的高速掃描和對應的減少時間。