このウォークスルーでは、MicroProfiler を使用してエクスペリエンスの問題の側面を見つけ、根本原因を特定する方法を示します。エクスペリエンスをダウンロードし、 ファイルから開く をStudio で開き、続行します。
問題を特定する
Studio でエクスペリエンスを開いた後、F5 または プレイ ボタンでテストを開始します。
フレームレートは悪くないが、このサイズとスコープの経験にふさわしいほど滑らかではない。ナビゲート to the ビュー tab and click 概要 under 統計 .
フレームレートは 60FPS 以下であることに注意してください。
Open the MicroProfiler by pressing Ctrl Alt F6 ( ⌘ ⌥ F6 ).
フレーム時間は 一貫性がある —バーは大体同じ高さです—なので、低フレームレートを引き起こしているものは、時折実行してフレーム時間のスパイクを引き起こすのではなく、すべてのフレームを実行しています。
Pause the MicroProfiler by pressing Ctrl P ( ⌘ P ).キーボードショートカットで一時停止すると、詳細モード が開きます。
クリックしてドラッグしてグラフをパンする。ワーカースレッドの特定のタスクが、メインスレッドと比べて処理時間が多く使用されているように見えるかどうかを注意してください。RunService.Stepped の上をホバーし、レンダリングにどれくらい時間がかかるか注意してください。
タイムラインのスタックバーは、コードの階層を示しているので、問題を特定しようとするために、低層と低層をホバーし続けましょう。
スクリプトの名前を示す LocalScript ラベルと、問題がレイキャストに関連する可能性を示す Raycast ラベルを注意してください。
トラブルシュートラベルを作成する
マイクロプロファイラが開始ポイントを提供したので、問題のあるコードをトラブルシュートできます。
プレイテストを停止し、エクスプローラーウィンドウを 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
問題を確認して修正
エクスペリエンスのテストを開始し、MicroProfiler を再度開きます。
マイクロプロファイラが今どのようにカスタムラベルを表示しているか注意してください、これはこの機能が本当に根本原因であったことを示しています。
プレイテストを停止する。
onStepped() 機能と RunService.Stepped:Connect(onStepped) 接続を削除またはコメントアウトします。
もう一度エクスペリエンスのテストを開始し、デバッグステータスの概要を再確認します。
マイクロプロファイラグラフにおけるフレームレートと対応するフレーム時間の大幅な向上を注意してください。