ゲームの最適化ガイド

開発者向けページ2026年9月27日 公開

ロード時間を縮め、スマホで軽く動かすための設定とコツをまとめたページです。Unity と Godot のおすすめのビルド設定も載せています。

1. まず見るところ

GameRush のプレイヤーは、フィードを流しながらスマホでゲームを次々に開きます。読み込みが長いゲームは遊ばれる前に飛ばされ、重いゲームは端末が熱くなったりページごと落ちたりします。次の項目から順に見てください。

  • Unity は Compression Format を Brotli、Decompression Fallback を切る
  • Unity は Managed Stripping Level を Medium 以上、Strip Engine Code を有効、IL2CPP Code Generation を Faster (smaller) builds
  • Godot は Use Threads を切る(Godot 4.3 以降の単スレッド書き出し)
  • 合計のビルドサイズは 30MB 以下 を目安にする(上限は 300MB)
  • テクスチャと音声を圧縮し、使っていないアセットとパッケージを消す
  • 最初のシーンは小さく作り、残りは後から読み込む
  • スマホでは描画解像度とエフェクトを絞る

Unity と Godot の設定は SDK からまとめて適用してビルドできます(推奨設定でビルドする)。

2. GameRush が自動でやること

配信側で縮められる部分は GameRush が受け持ちます。作者が設定する必要はありません。

  • 圧縮して配信する。 圧縮せずに上げたファイルも、起動に要るもの(wasm / data / js など)はこちらで圧縮して配信します。
  • 次に流れるゲームを先に読んでおく。 いま遊んでいるゲームの裏で、次のゲームのファイルを端末に取っておきます。間に合えば、開いたときにはダウンロードがほぼ終わっています。
  • Unity の起動を急がせる。 Studio で Unity を選んで上げたビルドは、GameRush のプレイヤーが wasm と data のダウンロードを最優先で並行して始め、ローディングバーを出します。
  • エッジにキャッシュする。 ビルドは書き換わらない URL で配信され、各地のエッジに置かれます。

ビルドそのものの重さ(wasm と data の大きさ、圧縮の設定、起動時にやる処理)は、配信側では削れません。ここから先は作者側の設定で決まります。

3. ロード時間を縮める

先読みが間に合っているとき、ロード時間はほぼ「wasm のコンパイル + 起動処理」の時間です。どちらも端末の CPU で決まり、ビルドが大きいほど長くなります。つまり体感を決めるのは主にビルドの大きさです。

合計のビルドサイズ体感
〜30MB快適
50MB を超える先読みが間に合わなかったとき、モバイル回線で待ちが目立ち始める
300MBアップロードの上限(超えると受け付けない)

データを小さくする

  • テクスチャ: 表示サイズより大きい画像を持ち込まない(スマホなら 1024px〜2048px が上限の目安)。圧縮フォーマットを使い、非圧縮のテクスチャを残さない。
  • 音声: BGM は長いので圧縮率を上げる(Unity は Vorbis の Quality を下げる、Godot は Ogg Vorbis を使う)。短い効果音は小さく保つ。
  • 使っていないもの: 試しに入れたパッケージやアセットは書き出し前に消す。Unity は Build Report や Editor.log の Build Report 節で、何が大きいかを確かめられる。
  • 最初のシーン: 最初のシーンが参照するアセットは、起動時に必ず読まれるデータ(Unity の .data、Godot の .pck)に入る。タイトル画面だけで起動し、残りは Addressables や後からの読み込みに回すと、起動が軽くなる。

ロード画面を早く外す

GameRush は、ゲームが最初の1枚を描いた時点でロード画面を外します。canvas を使わず DOM だけで描くゲームはこれを検出できないので、起動し終えたら次の1行を呼んでください。

JavaScript
parent.postMessage({ type: "grush:ready" }, "*");

4. 処理負荷を下げる

スマホのブラウザは、同じ端末のネイティブアプリより使える CPU・GPU・メモリがずっと少なく、フィードの画面と同じタブの中で動きます。重いゲームはフレームが落ちるだけでなく、端末が熱くなって性能がさらに下がったり、メモリが足りずにページごと再読み込みされたりします。

フレームレートと解像度

  • Unity の WebGL は Application.targetFrameRate が既定の -1 のとき、ブラウザの描画タイミング(requestAnimationFrame)に合わせて動く。ふつうはこのままにして、重い端末でだけ 30 に下げる。
  • Godot は Engine.max_fps で上限を決められる。既定の 0 は上限なしで、ブラウザの描画タイミングに合わせて動く。熱や電池が気になるスマホでだけ 30 にする。
  • 高解像度の画面で等倍に描くと、ピクセル数は 3〜4 倍になる。GPU が重いゲームは描画解像度を下げるのがいちばん効く。
  • フルスクリーンのポストエフェクト(ブルーム・被写界深度・SSAO など)と、リアルタイムの影は、スマホでは真っ先に削る候補。
C#
void Awake()
{
    if (Application.isMobilePlatform)
    {
        Application.targetFrameRate = 30;
    }
}
GDScript
func _ready() -> void:
    if OS.has_feature("web_android") or OS.has_feature("web_ios"):
        Engine.max_fps = 30

CPU とメモリ

  • 毎フレームの割り当てを減らす。 Unity の WebGL はガベージコレクションがフレームの合間にまとめて走るので、Update で new や文字列の連結を繰り返すと、定期的にカクつく。弾や敵はオブジェクトプールで使い回す。
  • スレッドに頼らない。 GameRush ではマルチスレッドの書き出しが動かないので、重い計算は複数フレームに分けるか、事前に済ませておく。
  • メモリを使い切らない。 iPhone の Safari は1つのタブが使えるメモリに上限があり、超えるとページごと再読み込みされる。大きなテクスチャや音声を一度に全部読み込まず、使い終わったシーンのアセットは解放する。
  • 物理とパーティクルの数を絞る。 同時に動かすオブジェクトの数が、そのまま CPU の負荷になる。

測る

Studio のアナリティクスには、実際のプレイヤーの端末で測ったロード時間(平均・p95・途中離脱率)とフレームレートが出ます。API からも取れます(アナリティクス)。設定を変えたら、次のビルドで数字がどう動いたかを見てください。

手元で確かめるときは、パソコンのブラウザではなく実際のスマホで、できれば数年前の機種で開いてください。パソコンで快適なゲームがスマホで重いのはよくあることです。

5. Unity のおすすめ設定

Player Settings > WebGL で設定します。SDK の GameRush > 推奨設定でビルド を使うと、下の表をまとめて適用してビルドできます(推奨設定でビルドする)。

設定おすすめ理由
Publishing Settings > Compression FormatBrotliいちばん小さくなる。GameRush は正しいヘッダーを付けて配信する
Publishing Settings > Decompression Fallbackオフオンにすると JavaScript で解凍してからコンパイルする形に固定され、ダウンロードとコンパイルが並行しなくなる
Publishing Settings > Data CachingオフGameRush が自分で先読みとキャッシュをするので二重になる
Other Settings > Managed Stripping LevelMedium(High でも可)使っていないコードを削って wasm を小さくする
Other Settings > Strip Engine Codeオン使っていないエンジンの機能を削る
Other Settings > IL2CPP Code GenerationFaster (smaller) builds実行速度よりサイズを優先する
Other Settings > C++ Compiler ConfigurationReleaseデバッグ用の情報を載せない
Build Settings > Code Optimization(2022 以降)Disk Size(Unity 6 は Disk Size with LTO)wasm が小さくなる
Publishing Settings > Enable ExceptionsExplicitly Thrown Exceptions Only例外の検査を減らして小さく速くする。None にするとエラーの原因が追えなくなる
Other Settings > Graphics APIsWebGL 2 だけWebGL 1 向けの分を持たない
Publishing Settings > Enable MultithreadingオフGameRush の配信ではスレッドが動かない
Build Settings > Development Buildオフ開発用ビルドは大きく遅い

Managed Stripping Level を High にすると、リフレクションで呼んでいるコードまで削られて動かなくなることがあります。そのときは Medium に戻すか、link.xml で残す型を指定してください。

レンダーパイプラインは Built-in か URP を使ってください。HDRP は WebGL に対応していません。

6. Godot のおすすめ設定

Godot 4.3 以降の Project > Export の Web プリセットで設定します。SDK の GameRush SDK Build プラグインを使うと、下の設定の「GameRush Web」プリセットを作って書き出せます(推奨設定でビルドする)。

設定おすすめ理由
Variant > Thread SupportオフGameRush の配信ではスレッドが動かない
Variant > Extensions SupportオフGDExtension を使わないなら要らない
VRAM Texture Compression > For Mobileオンスマホの GPU が読める形式(ETC2 / ASTC)のテクスチャを入れる
VRAM Texture Compression > For Desktopオンパソコンのブラウザで遊ぶ人向け
Progressive Web App > EnabledオフGameRush の先読みとぶつかる
Export Pathindex.htmlGameRush はいちばん上の index.html を入口にする
  • レンダラーは Compatibility を使ってください。Web への書き出しで動くのは Compatibility だけです。
  • For Mobile をオンにするには、Project Settings の Rendering > Textures > VRAM Compression > Import ETC2 ASTC もオンにします。テクスチャの取り込み直しが走り、.pck は大きくなります。2D で Lossless のテクスチャしか使っていないなら影響はほとんどありません。
  • .pck は起動時に丸ごと読まれます。使わないリソースは Export の Resources タブで除外してください。
  • Godot 4.5 系は、音を鳴らすと iOS で落ちるという報告があります。公開前に iPhone の実機で通して遊んでください。

7. Phaser と Web(その他のツール)

  • アセットの参照は相対パスにする(Vite なら base: "./")。
  • 本番用にビルドして minify する。ソースマップは上げない。
  • 画像はスプライトシートにまとめ、webp を使う。音声は ogg / m4a にする。
  • 起動に要らないアセットは、タイトル画面を出してから読み込む。
  • GameRush のローディングバーは出ないので、読み込み中の表示はゲームの側で用意する。

書き出しの手順とアップロードで弾かれる条件は 対応エンジンと書き出しガイド にあります。