パフォーマンスの問題を特定することは、一般的にフレームレート(計算)、メモリ、またはロード時間のいずれかのカテゴリに絞り込むことを意味します。
Robloxには、パフォーマンスの問題を特定するためのツールがいくつかあり、そのうちのいくつかはRobloxクライアント(したがってStudioでも)で利用可能であり、他のいくつかはStudioのみに利用可能です。クライアントの動作は直接観察できますが、サーバーの問題を診断するにはツールを使用する必要があります。
診断ツール
| ツール | 説明 | 場所 | キーボードショートカット | 環境 |
|---|---|---|---|---|
| 開発者コンソール | リアルタイムのログメッセージ、エラー、メモリ、ネットワーク、およびスクリプトパフォーマンスに関する詳細情報を含むコンソール。メモリ消費の監視、主要なサーバーの健康状態の統計、スクリプトパフォーマンスの統計を表示するのに役立ち、クライアントまたはサーバーのMicroProfilerを起動できます。 | Studio ゲーム内 | F9 | スタジオテスト ライブセッション |
| MicroProfiler | 各フレームでのタスクに費やされる計算時間を分解するデバッグツール。個々のフレームの詳細な内訳を示すダンプを生成でき、パフォーマンスの問題を引き起こしている特定のタスクを特定するのに役立ちます。問題が発生している側に応じて、クライアントまたはサーバーのいずれかでプロファイラーを実行できます。 | Studio ゲーム内 | CtrlAltF6 (⌘⌥F6) | スタジオテスト ライブセッション |
| シーン分析 | クライアントとサーバーのシーンが使用しているリソースや、そのリソース使用の責任があるインスタンスに関する比較情報を一目で提供します。 | Studio | N/A | スタジオテスト |
| パフォーマンス統計 | メモリ消費、CPU、GPU、送受信されたネットワークデータ、PING時間などの基本的なパフォーマンス統計を含むツールバー。 | ゲーム内 | CtrlAltF7 (⌘⌥F7) | スタジオテスト ライブセッション |
| デバッグ統計 | グラフィック、物理、ネットワークトラフィック、FPSに関する詳細情報をオーバーレイします。 | Studio ゲーム内 | ShiftCtrlF1 (Shift⌘F1), ShiftCtrlF2 (Shift⌘F2), ShiftCtrlF3 (Shift⌘F3), ShiftCtrlF4 (Shift⌘F4), ShiftCtrlF5 (Shift⌘F5) | スタジオテスト ライブセッション |
| ネットワークシミュレーション | 遅延、ジッター、パケットロスなどの実世界のネットワーク条件をシミュレートするプロパティで、接続のプレイテストを行います。 | Studio | AltS(⌥S) | スタジオテスト |
| パフォーマンスダッシュボード | クライアントとサーバーのメモリ使用量、クライアントフレームレート、サーバーハートビート、およびクラッシュ率の集計チャートをリアルタイムで表示するダッシュボード。パフォーマンスパターンを時間の経過とともに分析するのに役立ちます。詳細はパフォーマンスの監視を参照してください。 | クリエイターダッシュボード | N/A | ライブセッション |
サーバーの計算
サーバーハートビートはすべてのゲームで60 FPSに制限されているため、値が低い場合はパフォーマンスの問題を示している可能性があります。サーバーハートビートを確認するには:
開発者コンソールを使用する - サーバージョブタブで、ハートビート行を展開し、ゲームのハートビートを示す秒あたりのステップ値を確認します。
MicropProfilerを使用すると、フレームが16.67 msを超えるとグラフが確認できます。
サーバーハートビートの劣化のもう一つの症状は、遅延の増加(一般にPINGとして知られています)です。サーバーが各フレームのタスクの計算を終えるのにかかる時間が長くなればなるほど、クライアントから送受信されるネットワークデータの処理にも時間がかかります。サーバーに接続されているすべてのプレイヤーの平均PINGを確認するには、開発者コンソールのサーバー統計タブに移動します。
クライアントの計算
デフォルトのクライアントフレームレートの上限は60 FPSです。ただし、ユーザーはWindows上で240 FPSまでフレームレートの上限を引き上げることができます。
デバイス間でフレームレートは大きく異なります。たとえば、高性能PCは計算の問題を「強引に」解決でき、フレームレートの低下が目に見えない場合もあります。低性能のデバイスでテストを行うと、問題はより深刻になり、気付きやすくなります。
ゲームのフレームレートを確認するには:
クライアントでShiftF5を押してデバッグ統計サマリーを表示します。
Studioのウィンドウ ⟩ パフォーマンスメニューから、統計を有効にしてデバッグ統計を表示します。
MicroProfilerを使用すると、フレームが16.67 msを超えるとグラフが確認できます。
サーバーメモリ
サーバーメモリの使用量を50%未満に保つようにしてください。サーバーの総メモリは次の式を使用します:
6.25 GiB + (100 MiB * 接続されているプレイヤーの最大数)
たとえば、30人の接続プレイヤーがいるサーバーの総メモリは約9.18 GiBです。プレイヤーが接続されるとサーバーはメモリを増加させますが、プレイヤーが切断されるとメモリを失うことはありません。10人のプレイヤーが離脱しても、サーバーのメモリは9.18 GiBのままで、8.2 GiBに縮小することはありません。
サーバーがシャットダウンすると(たとえば、空のときや更新プロセスの一部として)、その置き換えは基本メモリ量から開始し、プレイヤーが接続するにつれてスケールアップが始まります。
クライアントメモリ
ゲームのメモリ使用量を確認する方法はいくつかあります:
- 開発者コンソールを開き、メモリタブに切り替えます。このタブでは、メモリがどのように割り当てられているかを分解して表示します。最も正確な読み取りを得るにはStudioではなくクライアントを使用してください。
- クライアントの設定メニューからパフォーマンス統計ビューを有効にして、クライアントの総メモリ使用量に関するオーバーレイを表示します。
高いメモリ使用量は必ずしも問題を示すものではありませんが、より調査が必要な兆候には次のようなものがあります:
- パフォーマンスダッシュボードに表示されるクライアントのクラッシュの有意な割合、特に更新と一致して急増する場合。何らかのクラッシュは予想されますが、クラッシュ率が2-3%を超える場合は調査する必要があります。
- ゲームがサポートすることを希望するデバイスでテスト中にクラッシュが発生する。
クライアントのゲームメモリ消費の大部分は、メモリに読み込まれたアセット(画像、メッシュ、音声ファイルなど)から来ています。開発者コンソールで、次のラベルをPlaceMemoryの下で確認します:
- GraphicsMeshParts - メッシュによるグラフィックスメモリ消費。
- GraphicsTexture - テクスチャによるグラフィックスメモリ消費。
- Sounds - 音声ファイルによるメモリ消費。
ロード時間
ロード時間を確認するための組み込みツールはありませんが、ミリ秒単位の精度が不要であるため、ストップウォッチで現在の基準を把握し、実質的な改善があったかどうかを確認するには通常それで十分です。ReplicatedFirstのクライアントスクリプトを使用して、変更がロード時間にどのように影響を与えるかをある程度知ることができますが、このスクリプトは完全なエンドツーエンドの測定を提供しません:
local startTime = os.clock()
game.Loaded:Connect(function()
local loadTime = os.clock() - startTime
local roundedLoadTime = math.round(loadTime * 10000) / 10000 -- 小数点以下4桁
print("ゲームが " .. roundedLoadTime .. " 秒でロードされました。")
print("読み込まれたインスタンスの数: " .. #workspace:GetDescendants())
end)
追加の洞察を得るには、スタジオ設定のネットワークタブから印刷参加サイズの内訳を有効にして、ゲームをStudioで開始したときにサイズ別の上位20インスタンスとインスタンスタイプ別の割合を印刷します。
PING
PING(遅延)の主な2つの測定値はネットワークPINGとデータPINGです。
ネットワークPINGは、クライアントがネットワークデータパケットを送信してからサーバーのエコー応答を受信するまでの往復時間です。一般的なピングネットワークユーティリティによって報告されるtimeに似ています。
ネットワークPINGはパフォーマンス統計バーに表示されます。これはクライアントとサーバー間のネットワークパスの長さによって主に影響され、あなたの制御範囲外です。ただし、ネットワークシミュレーションを使用してStudioでプレイテストを行うと、PINGや他のネットワーク条件をシミュレートできます。
データPINGは、クライアントがデータを複製システムを介して信頼性をもって送信してから、サーバーの複製システムのエコー応答を受信するまでの往復時間です。これは、クライアントおよびサーバーの複製キューに費やされた時間と、失われたまたは破損したパケットのTCPのような再送信を含みます。
データPINGは、クライアントから信頼できるリモートイベントを送信し、サーバー上で受信し、その後、サーバーからクライアントに応答として信頼できるリモートイベントを送信するのに似ています。データPINGはクライアントとサーバー間のネットワークで費やされた時間も含むため、ネットワークPING以上の値になります。
サーバーに接続されているすべてのプレイヤーの平均データPINGは、開発者コンソールのサーバー統計タブに表示されます。個々のクライアントのデータPINGは、ShiftF3を使用してネットワークデバッグ統計を表示することで確認できます。
データPINGは、ネットワークパスと複製キュー遅延の両方に影響されます。サーバーがネットワークが送信できる速度(またはクライアントが処理できる速度)よりも速く複製データを生成する場合、データは複製キューで待機する必要があります。データPINGとネットワークPINGの間には、ネットワークの再送信とRobloxアプリによるネットワークデータの処理方法のために通常は差が生じます。ただし、データPINGがネットワークPINGよりも大幅に高い場合は、MicroProfilerを使用してネットワークトラフィックを確認してください。最適化の提案については、ネットワーキングと複製を参照してください。