{}const=>[]async()letfn</>var
開発Lua

Robloxゲームの最適化:ラグを取り除き、FPSを60に上げる方法

Roblox Studioで最初のゲームを作成し、クールなモデル、エフェクト、メカニクスを追加しましたが、起動時にゲームの速度が低下し、FPSが20に低下しますか?心配しないでください。これは初心者の開発者にとってはよくあることです。ラグが発生する理由と、それを解消する方法を見ていきましょう。

К

Kodik

著者

1分で読める

ゲームが遅くなるのはなぜですか?

最適化を開始する前に、Robloxのゲームはすべて、グラフィックスのレンダリング、物理演算、スクリプトの実行、サーバーとクライアント間のデータの同期など、膨大な量の情報を常に処理する必要があるエンジンで動作していることを理解することが重要です。この情報が多すぎると、パフォーマンスが低下します。

ラグの主な原因は、通常、次の3つの領域にあります。 グラフィックスが複雑すぎて、ポリゴンが多すぎます, 最適化されていないスクリプト、各フレームで余分な操作を実行する、および エンジンの物理的な過剰使用。初心者は開発段階でこれらの問題に気づかないことが多いですが、コンピューターやモバイルデバイスの性能が低いプレイヤーはすぐにブレーキに直面します。

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

モデルとグラフィックスの最適化

最も明白なことから始めましょう。3Dモデルです。ゲーム内の各モデルは三角形(ポリゴン)で構成されており、それらが多いほどエンジンがすべてを描画するのが難しくなります。数千のポリゴンを持つ美しい詳細な木のモデルを取得し、マップ上に50本のそのような木を配置した場合、ゲームが遅くなることに驚かないでください。

解決策は簡単です。 ポリゴン数の少ないモデルを使用してください。プレイヤーから離れた背景オブジェクトには、シンプルなモデルで十分です。オブジェクトがカメラの真正面にない場合、プレイヤーは500ポリゴンのモデルと5000ポリゴンのモデルの違いに気づかないことが多いことを覚えておいてください。美しさとパフォーマンスのバランスを見つけるようにしてください。

もう一つの重要なポイントは、 テクスチャ小さなオブジェクトに4096x4096ピクセルの画像をアップロードしないでください。Robloxはテクスチャを自動的に圧縮しますが、事前に合理的なサイズを使用することをお勧めします。ほとんどのオブジェクトでは、512x512または1024x1024ピクセルで十分です。また、異なるテクスチャを多用することは避けてください。エンジンは、少ない数の繰り返し使用される素材の方が処理しやすくなります。

照明とエフェクトの最適化

Robloxの照明はパフォーマンスに大きな影響を与える可能性があります。マップ上に数十個の光源(SpotLightPointLightSurfaceLight)があり、それぞれが影を落とす場合、大きな負荷がかかります。アクティブな光源の数を制限し、影を選択的に使用するようにしてください。雰囲気を作るために本当に重要な場合にのみ使用してください。

多くの光源の代わりに、グローバルイルミネーション(GlobalShadows)とLightingで適切に設定された照明パラメータを使用することができます。また、光源のCastShadowプロパティにも注意してください。影が重要でない場合は無効にしてください。追加の影ごとに、追加の計算が必要です。

視覚効果(パーティクル、光線、煙、その他のParticleEmitter)については、賢く使用してください。1秒に100個のパーティクルを生成するエミッターは素敵に見えるかもしれませんが、そのようなエミッターが10個あり、ゲームが同時に1000個のパーティクルを処理しなければならない場合、パフォーマンスは低下します。可能な限り、パーティクルの数、サイズ、発生頻度を減らしてください。

スクリプトの最適化

それでは、スクリプトに移りましょう。これはおそらく 最適化のための最も重要な領域多くの初心者の開発者は、不要な場合でも、無限ループで各フレームを実行するコードを書きます。典型的な例は、何らかの条件を継続的にチェックするために、内部に wait() を含む while true do ループを使用することです。

定期的なチェックの代わりに、イベントを使用します。 たとえば、プレイヤーが特定の部分に触れたときに追跡する必要がある場合は、イベント Touched を使用し、フレームごとにプレイヤーの位置を確認しないでください。イベントは何かが起こったときにのみトリガーされ、チェックでプロセッサーに常に負荷をかけることはありません。

もう 1 つの重要な点は、頻繁に実行されるループで FindFirstChild または他のオブジェクト検索メソッドを使用しないことです。オブジェクトにアクセスする必要がある場合は、スクリプトの初期化時に変数に参照を 1 回保存することをお勧めします。フレームごとにツリーWorkspace内のオブジェクトを検索することは、リソースの無駄です。

また、クライアントとサーバー間の通信に使用されるRemote EventsRemote Functionsにも注意してください。フレームごとにサーバーにデータを送信しないでください。これにより、ネットワーク負荷が発生します。ゲームプレイに重要でない場合は、データをグループ化して、1 秒に 1 回など、送信頻度を減らします。

物理演算

Robloxの物理エンジンは、衝突、重力、オブジェクト間の相互作用を計算します。物理演算が有効になっているオブジェクトが多いほど、負荷が大きくなります。落下してはならない装飾要素やプレイヤーが操作しない装飾要素がある場合は、それらをAnchoredtrueで設定します。これは、オブジェクトが固定されており、エンジンがその物理演算にリソースを費やさないことを意味します。

また、以下にもご注意ください 衝突の複雑さ (衝突)。Robloxは、各オブジェクトに対して自動的に見えない衝突境界を作成しますが、複雑なモデルの場合、これらの境界は非常に詳細になる可能性があります。可能であれば、モデルの形状を正確に繰り返すのではなく、単純な形状(立方体、球体)を使用してください。これは、CollisionFidelityを介して設定できます。ほとんどのオブジェクトでは、PreciseConvexDecompositionの代わりにBoxまたはDefaultの値が適しています。

メモリとロードの管理

一度にすべてをゲームにアップロードしないでください。大きな地図を使用する場合は、テクニックを使用してください ストリーミング (ストリーミング)—プレイヤーの近くにある世界の一部のみをプレイヤーに表示します。Robloxは、プレイヤーが移動するにつれて世界の一部を自動的にロードおよびアンロードする組み込みシステムStreamingEnabledを提供します。

同時にアクティブなオブジェクトの数にも注意してください。NPC(ノンプレイヤーキャラクター)やモブがたくさんいるゲームの場合は、すべてを同時に作成しないでください。 オブジェクトのプール — 事前に特定の数のオブジェクトを作成し、新しいオブジェクトを作成したり古いオブジェクトを削除したりするのではなく、それらを再利用します。

異なるデバイスでのテスト

ゲームはコンピューターだけでなく、他のデバイスでも動作する必要があることを忘れないでください。多くのRobloxプレイヤーは、あまり強力ではないハードウェアを搭載したモバイルデバイスやノートパソコンでプレイしています。定期的にゲームをさまざまなデバイスでテストするか、スタジオでさまざまなパフォーマンスレベルをエミュレートしてください。

Roblox Studioの組み込みツールを使用してパフォーマンスを分析します。開く Developer Console テスト中に(F9)を押して、PerformanceタブとMemoryタブを見てください。そこで、ゲームを負荷をかけているものが正確に何であるかがわかります。スクリプト、グラフィックス、またはネットワークです。これにより、最初に何に注意を払うべきかを理解するのに役立ちます。

ちょっとしたコツ

パフォーマンスを大幅に向上させることができる簡単なテクニックがいくつかあります。たとえば、 LOD (詳細レベル)—カメラから離れたオブジェクトのモデルの簡略化バージョンを表示します。透明度やWorkspaceからの削除などを使用して、プレイヤーに表示されないオブジェクトのレンダリングを無効にします。

また、 インターフェースの最適化GUI要素が多い場合、特にアニメーションや更新テキストが多い場合は、負荷も大きくなります。実際に変更されたインターフェース要素のみを更新し、フレームごとにすべてを再描画しないでください。

ゲームの最適化は一度限りのタスクではなく、継続的なプロセスです。新しいコンテンツを追加するときは、パフォーマンスを監視し、改善を加える必要があります。重要なのは、基本的な原則を理解し、開発の最初からそれらを適用することです。そうすれば、ゲームが完成したときにゲーム全体をやり直す必要はありません。

これらのトピックやその他の多くのトピックは、 コディケ より詳細に、実践的な例で各側面を分析し、タスクを実行して知識を強化します。私たちは、初心者の開発者が理論を学ぶだけでなく、実際のプロジェクトでそれを適用する方法を学ぶのに役立つコースを作成しています。

学習中にサポートが必要な場合や、アイデアについて話し合いたい場合は、すでに大勢のチームが活動しています。 Telegramチャンネル開発者が互いに助け合い、経験を共有し、一緒に専門的に成長する場所です!

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要