Roblox の最適化は、デバイス全体でよりスムーズなゲームプレイを実現し、ゲームの安定性を向上させ、ユーザーの保持率を高めるために重要です。最適化されたゲームは、肯定的な評価とレビューを受けやすくなり、その可視性が向上します。ゲームを効果的に最適化するための多くの手法が利用可能です。
ストリーミング
Roblox では、必要に応じて 3D コンテンツを動的にロードおよびアンロードすることで、プレイヤー体験を向上させます。
Roblox Studio
- パーツの数を減らすことで、パフォーマンスが向上します。
- テクスチャを最適化して、特に低スペックデバイス向けに、視覚品質とパフォーマンスのバランスを取ります。
- 動的な照明を制限し、影のない照明を使用して照明を最適化します。これにより、計算負荷が軽減され、ゲーム全体のパフォーマンスが向上します。
ストリーミング設定
Empty
Empty
Empty
Default | エンジンが最適なオプションを選択し、現在のところ Legacy と同じです。 |
Legacy | モデルは、プレイヤーが参加するときにその親オブジェクトとともにロードされ、親がアンロードされない限りアンロードされません。 |
Improved | モデルは、必要に応じてのみロードされ、プレイヤーが参加する際にはロードされません。非空間モデルはその後すぐにロードされ、空間モデルは必要に応じてロードされ、後でアンロードされる可能性があります。 |
Empty
Empty
Empty
ゲームコンテンツのストリーミングを有効または無効にします。
Empty
Empty
Empty
Default | 追加のチェックは行われず、プレイヤーは欠落したコンテンツに遭遇する可能性があります。 |
PauseReceive | 重要な部分が欠落している場合、データの受信を一時停止し、ゲームプレイの問題を回避します。 |
Request | プレイヤーがエリアに入ったときに不足している部分を要求し、未ロードのコンテンツに遭遇する可能性を減らします。 |
Empty
Empty
Empty
プレイヤーの周りのコンテンツが最優先でストリーミングされる最小エリアを設定します。デフォルトは 64 スタッドです。この値を増やすと、メモリと帯域幅がより多く使用されます。
Empty
Empty
Empty
プレイヤーからコンテンツがストリーミングされる最大距離を定義します。デフォルトは 1024 スタッドです。メモリが許可する場合、エンジンはこの半径を超えた以前にロードされたコンテンツを保持する可能性があります。
Empty
Empty
Empty
Default | コンテンツは、メモリが不足している場合にのみ削除されます(LowMemory と同じ)。 |
LowMemory | 必要に応じて、メモリを解放するためにコンテンツをアンロードします。 |
Opportunistic | メモリ圧力がなくても、目標半径を超えたコンテンツをアンロードし、パフォーマンスを最適化します。 |
詳細レベル (LOD)
Roblox では、この設定により、インスタンス ストリーミングが有効な体験でのモデルの視覚品質が決定されます。
StreamingMesh | ストリーミング半径外のモデルには、解像度の低い 'インポスター' メッシュを使用します。 |
Disabled/Automatic | 低解像度のメッシュは表示されず、ストリーミング半径内で完全な詳細が維持されます。 |
Roblox Studio
物理
Roblox でゲームパフォーマンスを最適化するためには、物理設定の管理が重要です。物理を必要としないパーツをアンカー付きに設定する (part.Anchored = true) ことで、それらを非アクティブにできます。さらに、特定のパーツの衝突を無効にする (part.CanCollide = false) ことで不要な衝突を最小限に抑え、パフォーマンスを向上させます。
Roblox Studio
その他の最適化オプション
- パーツの数を減らすことで、パフォーマンスが向上します。
- テクスチャを最適化して、特に低スペックデバイス向けに、視覚品質とパフォーマンスのバランスを取ります。
- 動的な照明を制限し、影のない照明を使用して照明を最適化します。これにより、計算負荷が軽減され、ゲーム全体のパフォーマンスが向上します。
- パーツとメッシュの効率的な使用:高ポリゴンメッシュの使用を最小限に抑え、可能な限り Roblox の BaseParts を使用します。
- スクリプトの最適化:不要なループの排除、アルゴリズムの最適化、および効率的なデータ構造の使用。
- ネットワークの最適化:データ転送を減らし、クライアントとサーバー間のスムーズな通信を確保します。
- クライアント側の最適化:サーバーの負荷を軽減し、応答性を向上させるためにタスクをクライアントにオフロードします。
- Debris サービス:一時的なオブジェクトを管理するために Debris サービスを使用します。
Empty
Empty
Empty
local Debris = game:GetService("Debris")
local part = Instance.new("Part")
part.Position = Vector3.new(0, 10, 0)
part.Parent = workspace
-- Add the part to Debris, which will remove it after 5 seconds
Debris:AddItem(part, 5)
MicroProfiler (マイクロプロファイラー)
MicroProfiler は、Roblox Studio でパフォーマンスの問題を分析および診断するためのツールです。
Roblox Studio
Empty
Empty
Empty
Ctrl Alt F6 (⌘⌥F6)
Roblox Studio
MicroProfiler (ブルー & オレンジ)
Roblox Studio
Color Bar | Details | Indication |
---|---|---|
オレンジ | 標準フレームでジョブ時間がレンダー時間を超えます。 | CPU が焦点となる正常なパフォーマンスを示します。 |
ブルー | レンダー時間がジョブ時間を超えます。 | レンダリングのボトルネックを示します。'レンダリングスレッドを待機中' の詳細を見るにはホバーしてください。大量のブルーバーが表示されている場合、レンダリングが主な問題であることを示唆しています。 |
MicroProfiler (スパイク)
Roblox Studio
Graph Position | Details | Indication |
---|---|---|
中央 | バーは通常、グラフの中央付近に位置します。 | タスクスケジューリングがバランスの取れた通常の操作を示します。 |
スパイク | バーがグラフの中央を超えてスパイクまたは増加します。 | 通常、移動部品の処理など、タスクスケジューラプロセスの実行に時間がかかるため、スパイクが発生することを示します。 |
MicroProfiler (一時停止)
Empty
Empty
Empty
Ctrl P (⌘P)
MicroProfiler では、グラフをクリックまたはドラッグしてフレームを移動し、ホイールでタイムラインをズームできます。異なるタスクはカラフルなラベルで表示され、別のタスクの間に実行されたタスクは、対応するラベルがその下に直接表示されます。
Roblox Studio
MicroProfiler (ズームイン)
Empty
Empty
Empty
ラベルを右クリックすると、そのラベルの期間に合わせてタイムラインがズームされます。
Roblox Studio
Empty
Empty
Empty
左クリックすると、タスクが各フレームにかかる時間を示す折れ線グラフがゲームビューの右下に表示されます。このグラフは、パフォーマンステストに使用できます。
Roblox Studio
メインスレッド | Details |
---|---|
メインスレッド | 入力、物理、アニメーション、サウンド、Studio アップデートを管理し、他のスレッドを調整します。 |
ワーカースレッド | ネットワーキング、物理、パスファインディングなどのタスクでメインスレッドを支援します。CPU コアに基づいて複数のワーカーが使用されます。 |
レンダリング (GPU) | グラフィックのレンダリングを担当します。 |
カスタムプロファイリング
複雑なタスクにスクリプトがかかる時間を監視するには、セクションの開始時に debug.profilebegin を使用し、終了時に debug.profileend を使用します。これにより、これらのポイント間に費やされた時間が測定され、MicroProfiler のタイムラインにラベルが作成されます。
Empty
Empty
Empty
local Debris = game:GetService("Debris")
local part = Instance.new("Part")
part.Position = Vector3.new(0, 10, 0)
part.Parent = workspace
-- Add the part to Debris, which will remove it after 5 seconds
Debris:AddItem(part, 5)