Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

ゲームのサイズの最適化

Web やモバイルなどのプラットフォームでは、ゲームのサイズが成功を左右する重要な要因になることがあります。一方、ディスク容量が安価で、十分な空き容量があることの多いデスクトップやゲーム機では、それほど重要ではありません。

iOS と Android

Apple と Google は、Wifi ではなくモバイルネットワーク経由でダウンロードする場合のアプリケーションのサイズ制限を定めています。Android では、アプリバンドルを使って公開されたアプリの制限は 200 MB です。iOS では、アプリケーションが 200 MB を超えると警告が表示されますが、ユーザーはそのままダウンロードを続行できます。

2017年の調査では、「APK のサイズが 6 MB 増えるごとに、インストールのコンバージョン率が 1% 低下する」ことが示されています。(出典

HTML5

Poki をはじめとする多くの Web ゲームプラットフォームでは、初回ダウンロードのサイズを 5 MB 以下にすることを推奨しています。

Facebook は、Facebook Instant Game が 5秒未満、できれば 3秒未満で起動することを推奨しています。これが実際のアプリケーションサイズでどの程度に当たるかは明確に定義されていませんが、最大で 20 MB 程度の範囲を想定しています。

プレイアブル広告のサイズは通常、広告ネットワークに応じて 2 MB から 5 MB の間に制限されています。

サイズ最適化の方針

アプリケーションのサイズを最適化する方法は、エンジンのサイズを減らす方法と、ゲームのアセット(asset)のサイズを減らす方法の2つです。どちらか一方、または両方を実施できます。

アプリケーションのサイズの内訳をよりよく把握するには、バンドル(bundle)の作成時にビルドレポートを生成できます。ゲームのサイズの大部分をサウンドとグラフィックスが占めていることはよくあります。

Defold は、アプリケーションのビルドとバンドルの作成時に依存関係ツリーを作成します。ビルドシステムは、game.project ファイルに指定された、起動時に読み込まれるブートストラップコレクション(bootstrap collection)から始め、参照されているすべてのコレクション(collection)、ゲームオブジェクト(game object)、コンポーネント(component)を調べて、使用中のアセットの一覧を作成します。最終的なアプリケーションバンドルに含まれるのは、これらのアセットだけです。直接参照されていないものはすべて除外されます。未使用のアセットが含まれないと分かっていることは役立ちますが、開発者はそれでも、最終的なアプリケーションに何が含まれるか、個々のアセットのサイズとアプリケーションバンドルの合計サイズを考慮する必要があります。

エンジンのサイズの最適化

エンジンのサイズを手早く減らす方法は、使用していないエンジンの機能を削除することです。アプリケーションマニフェスト(application manifest)ファイルを使うと、不要なエンジンコンポーネントを削除できます。例:

  • 物理 - ゲームで Box2D や Bullet3D の物理機能を使わない場合は、物理エンジンを削除することを強くお勧めします
  • LiveUpdate - ゲームで LiveUpdate を使わない場合は、削除できます
  • 画像の読み込み - ゲームで image.load() を使って画像を手動で読み込み、デコードしない場合
  • BasisU - ゲームのテクスチャが少ない場合は、アプリケーションマニフェストで BasisU を削除してテクスチャ圧縮を使わないビルドと、BasisU と圧縮したテクスチャを使うビルドのサイズを比較します。テクスチャが少ないゲームでは、テクスチャ圧縮を使わずにバイナリのサイズを減らすほうが有益な場合があります。また、トランスコーダーを使わないことで、ゲームの実行に必要なメモリ量を減らせます。

アセットのサイズの最適化

アセットのサイズの最適化では、通常、サウンドとテクスチャのサイズを減らすことで最も大きな効果が得られます。

サウンドの最適化

Defold は次の形式をサポートしています:

  • .wav
  • .ogg
  • .opus

Defold は、8ビットと16ビットの PCM Wave ファイルをサポートしています。Ogg Vorbis と Ogg Opus はそれぞれの圧縮形式を使用し、PCM のビット深度の要件は適用されません。Opus デコーダーはデフォルトでは含まれていません。.opus リソース(resource)を使う前に、アプリケーションマニフェストInclude Sound Decoder: Opus を有効にします。 Defold のサウンドデコーダーは、現在のサウンドデバイスに必要なサンプルレートに合わせて、サウンドをアップサンプリングまたはダウンサンプリングします。

効果音などの短いサウンドは強く圧縮されることが多く、音楽ファイルは圧縮を弱めにする傾向があります。 Defold は圧縮を行わないため、開発者が各音声形式に合わせて圧縮を処理する必要があります。

外部のサウンド編集ソフトウェアでサウンドを編集して、品質を下げたり、形式を変換したりできます(ffmpeg などを使ってコマンドラインで処理することもできます)。コンテンツのサイズをさらに減らすために、サウンドをステレオからモノラルに変換することも検討してください。

テクスチャの最適化

ゲームで使うテクスチャを最適化する方法はいくつかありますが、最初に確認するのは、アトラス(atlas)に追加する画像やタイルソース(tile source)として使う画像のサイズです。ゲームで実際に必要なサイズより大きな画像を使わないでください。大きな画像をインポートしてから適切なサイズに縮小するのは、テクスチャメモリの無駄になるため、避けてください。まず、外部の画像編集ソフトウェアで、画像をゲームで実際に必要なサイズに調整します。背景画像などでは、小さな画像を目的のサイズに拡大して使っても問題ない場合があります。画像を適切なサイズまで縮小し、アトラスに追加するかタイルソースで使うようにしたら、アトラス自体のサイズも考慮する必要があります。使用できるアトラスの最大サイズは、プラットフォームとグラフィックスハードウェアによって異なります。

こちらのフォーラムの投稿では、スクリプトやサードパーティー製ソフトウェアを使って複数の画像のサイズを変更するためのヒントをいくつか紹介しています。

  • Web3D Survey プロジェクトに報告されている HTML5 の最大テクスチャサイズ
  • iOS の最大テクスチャサイズ:
    • iPad: 2048x2048
    • iPhone 4: 2048x2048
    • iPad 2, 3, Mini, Air, Pro: 4096x4096
    • iPhone 4s, 5, 6+, 6s: 4096x4096
  • Android の最大テクスチャサイズは大きく異なりますが、一般に、比較的新しいデバイスはすべて少なくとも 4096x4096 をサポートしています。

アトラスが大きすぎる場合は、複数の小さなアトラスに分割するか、複数ページのアトラスを使うか、テクスチャプロファイル(texture profile)でアトラス全体のサイズを変更する必要があります。Defold のテクスチャプロファイルシステムでは、アトラス全体のサイズを変更するだけでなく、圧縮アルゴリズムを適用してディスク上のアトラスのサイズを減らすこともできます。テクスチャプロファイルの詳細はマニュアルを参照してください。どの設定を使えばよいか分からない場合は、次の設定から始めて、さらに調整してみてください:

  • mipmaps: false
  • premultiply_alpha: true
  • format: TEXTURE_FORMAT_RGBA
  • compression_level: NORMAL
  • compression_type: COMPRESSION_TYPE_BASIS_UASTC

テクスチャの最適化と管理の詳細は、こちらのフォーラムの投稿を参照してください。

フォントの最適化

All Chars チェックボックスを使う代わりに、使用する文字を指定して Characters に設定すると、フォントのサイズを小さくできます。

必要時にダウンロードするコンテンツの除外

初期のアプリケーションサイズを減らすもう1つの方法は、ゲームコンテンツの一部をアプリケーションバンドルから除外し、必要になったときにダウンロードすることです。Defold は、必要時にダウンロードするコンテンツを除外するために、Live Update というシステムを提供しています。

除外するコンテンツには、レベル全体から、アンロックできるキャラクター、スキン、武器、乗り物まで、さまざまなものを指定できます。ゲームに多くのコンテンツがある場合は、ブートストラップコレクションと最初のレベルのコレクションに、そのレベルで必要な最小限のリソースだけを含めるように、読み込み処理を構成します。これを実現するには、「Exclude」チェックボックスを有効にしたコレクションプロキシ(collection proxy)またはファクトリー(factory)を使います。プレイヤーの進行状況に応じてリソースを分割します。この方法により、リソースを効率的に読み込めるようになり、初期のメモリ使用量を低く抑えられます。詳細は Live Update マニュアルを参照してください。

Android 固有のサイズ最適化

Android のビルドは、32ビットと64ビットの両方の CPU アーキテクチャをサポートする必要があります。Android 向けのバンドルを作成するときに、含める CPU アーキテクチャを指定できます:

Android バンドルへの署名

デフォルトでは、バンドルには armv7-androidarm64-android のアーキテクチャが含まれます。3つ目のアーキテクチャである x86_64-android も利用できますが、主に実機ではなく Android エミュレーター、ChromeOS、Windows Subsystem for Android で役立つため、デフォルトでは含まれません。これらの環境のいずれかを対象にする必要がある場合を除き、バンドルのサイズを抑えるためにチェックを外したままにしてください。

Google Play は、ゲームのリリースごとに複数の APKをサポートしています。そのため、CPU アーキテクチャごとに1つずつ、合計2つの APK を生成して両方を Google Play にアップロードすることで、アプリケーションのサイズを減らせます。

APK 拡張ファイルLive Update コンテンツの組み合わせも、Asset Portal の APKX 拡張を使うことで利用できます。