Unity でゲーム開発を始める

このガイドでは、一般的なゲーム開発サイクルについて概説します。これを読んだら 見ていきます。ぜひご覧ください。

Unity の開発ライフサイクルには 3 つの要素が フェーズ:

  • 計画と設計
  • 開発とテスト
  • 公開と保守

計画と設計

計画と設計フェーズでは、ゲームを作成する方法を決定します。マイページ モバイル向け開発における課題への対処方法を決定する 開発で使用するツールとプロセスを特定する。

すべてのチームメンバーから意見を得る

アート、エンジニアリング、デザイン、オーディオ、 本番環境チームが実装タスクを特定して記録します。例:

  • アートチームがキャラクターのアセット テクスチャやメッシュの予算を作成する 学びました。
  • 必要に応じて、エンジニアリング チームがメモリとパフォーマンスのチェックポイントを決定することもあります。 プラットフォームごとにプロファイリングを行います
  • ゲームの仕組みをデザインで考慮すると、このエクスペリエンスを実現できる。
  • 音声の専門家は、音声の連続性に関する要件を UI、2D、3D 空間サウンド。
  • 本番環境ではリリース要件を伝え、 チームが足並みを揃えて順調に進んでいます

モバイル向けにデザインする

モバイル プラットフォーム向けのアプリケーション開発では、特定の考慮事項、 例:

  • 可変画面アスペクト比
  • 消費電力
  • サーマル スロットリングとプロセッサ スロットリング
  • タップ入力
  • クロス プラットフォーム開発
  • グラフィック API(Vulkan または OpenGL ES)

モバイル向け設計に固有の考慮事項について詳しくは、 Unity での Android 開発 統合され、 Google Play アカデミー

開発とテスト

開発とテストのフェーズでは、ゲームをビルドし、 リリース前の準備です。内部で限定的に テスト をご用意しております。目標を Unity でアセットを整理し、デプロイの戦略や Play Asset Delivery Unity アドレス指定可能 支援します

以降のセクションでは、Google Pixel 向けに設計された Unity のツールと手法について説明します。 Android 向け開発に役立つアプリです

レンダリング

レンダリングは Unity シーンから 3D アセットと 2D アセットを描画するプロセスです。 表示されます。Unity エンジンがレンダリングを処理します Android プラットフォームについて考慮すべき点がいくつかあります。

テクスチャ

ターゲットに基づいて最大のテクスチャ サイズが必要かどうかを判断する できます。プロファイリングすると、 メモリ割り当て 目標値の変更によって削減される可能性がある費用と テクスチャのサイズ。

フレーム時間

Android デバイスでの過熱を防ぐには、目標フレーム時間を設定してください 平均 21 ミリ秒未満ですときには、 映画のようなコンテンツの読み込みや 21 ミリ秒を超えることはできますが、21 ミリ秒未満にとどめてください。 ミリ秒のしきい値としています。

モバイル プラットフォームでは、VSync により、フレームレートが 達成するのに役立ちますたとえば、60 Hz の画面アップデートで 60 fps の場合、ゲームは 30 にスロットリングされます。30 に達しなかった場合、 15.

多くの Android デバイスのディスプレイのリフレッシュ レートは 60 Hz と 120 Hz です。 はるかに短いフレーム時間(10 ミリ秒目標、10 ミリ秒未満)を 60 Hz のアップデート、120 Hz には 5 ミリ秒)で動作し、サーマル スロットリングや レンダリング率を高めるためにバッテリーの消耗を早めます。

Unity でゲームに特定のフレームレートを設定するには、次のコマンドを使用します。 Application.targetFrameRate

Android の Frame Pacing ライブラリを使用すると、 次のフレームの表示に時間がかかってもスムーズに リフレッシュレートを低くしますUnity バージョン 2021 以降の場合は、 Android のフレーム ペーシングを有効にすると、ディスプレイのリフレッシュ レートが 最も適したフレームレートを選択できます。これにより ゲームは ディスプレイの不要な更新によってバッテリーが浪費される。

ライブラリを有効にするには、[プロジェクト設定] >Player の [Settings for Android] で、[Optimized Frame Pacing] チェックボックスをオンにします。

[プロジェクトの設定] を表示しているダイアログ ボックス >プレーヤー設定 >名声のペースを最適化
図 1. [Optimized Frame Pacing](フレーム ペーシングの最適化)は、 Unity 2019.2 以降の Player Settings

Vulkan API

Vulkan はクロス プラットフォームで、高パフォーマンスの 3D です。 オーバーヘッドが少ない Graphics API です。Unity は Vulkan を使用して 2 通りの方法があります。

Auto Graphics API

Vulkan では Auto Graphics API を使用できますが、 動作はインストールされている Unity のバージョンによって異なります。以下を選択できます。 [Project Settings >プレーヤー >レンダリング

使用する Unity バージョンを選択する際は、次の点に注意してください。 次のコマンドを使用します。

  • Unity 2021.1 以前のバージョンでは、Vulkan は Auto Graphics APIUnity は OpenGL ES 3.2 の使用を試みます。デバイスが OpenGL ES 3.2、Unity は OpenGL ES 3.1、3.0、または 2.0 に順にフォールバックします。
  • Unity 2021.2 以降のバージョンでは、最初に Vulkan を使用します。デバイスが Vulkan をサポートしていない場合、Unity は OpenGL ES 3.2、3.1、3.0、2.0 にフォールバックします。
プロジェクト設定 >プレーヤー設定 >レンダリング >Auto Graphics API
図 2. Auto Graphics API の設定。

手動グラフィック API

または、Auto Graphics API を無効にして Vulkan を手動で有効にすることもできます。 Unity 2021.1 以前のバージョンを使用している場合は、 Vulkan。

このリストで Vulkan が OpenGL ES よりも上位である場合、Unity はまず Vulkan。デバイスが Vulkan をサポートしていない場合、Unity は OpenGL ES で動作します。 以下のような Android の Vulkan について詳しくは、Vulkan のスタートガイドをご覧ください。 最新のグラフィック API を使用してゲームのパフォーマンスを最適化する方法を学びます。

プロジェクト設定 >プレーヤー設定 >レンダリング >グラフィック API
図 3. Auto Graphics API を設定するときにグラフィック API を手動で設定する 無効になります。Vulkan が最初のオプションです。Unity は OpenGL ES 3.0 にフォールバックします。

描画呼び出し

画面に表示されるものはすべて、1 つ以上の描画呼び出しに関連付けられています。オン 最適化して減らすために、呼び出しの回数を減らして 画像処理装置(GPU)に送信します。

ドローコールは、信号待ちに車が並ぶようなものです。 信号が緑色に変わり、信号の前に一定数の自動車が通過できる できます。ライトが黄色に変わったら、理想的な目標フレームに到達しています 時間(21 ミリ秒)で、ライトが赤色に変わったら ミリ秒のフレーム時間制限です。次のレンダリング フレームに影響するものすべて その結果、フレームレートは目標の 30 fps を下回ります。

ゲームの描画呼び出しのパフォーマンスを改善する方法については、 詳しくは、 バッチ処理 記事をご覧ください。

シャドウ キャスティングの描画呼び出しは GPU に最も負荷が高く、 シンプルな環境でも GPU 時間を使用できます。シャドウキャスティングのコストを削減するには ソフト シャドウではなくハードシャドウを使用してみてください。条件 ローエンドのデバイスでは GPU の費用がかかりすぎる場合があるため、 ハードシャドウではなくブロブシャドウを使用します

テクスチャ

推奨されるテクスチャ Android での RGB テクスチャと RGBA テクスチャの圧縮形式は ASTC です。Unity では、 Android で使用する必要最小限のテクスチャ圧縮オプション ETC2 です。次のように ETC2 にフォールバックできます。 Unity のビルド設定で ASTC からバックアップします。

各プラットフォームでサポートされている形式の一覧については、Unity ドキュメントをご覧ください。 手動: プラットフォームごとの推奨テクスチャ形式、デフォルト形式、サポートされているテクスチャ形式

ユーザー インターフェースとアスペクト比

Unity SDK の デバイス シミュレータ さまざまなデバイスの画面解像度、向き、プレビューを 直接 Unity Editor で管理できます。ゲームビューを切り替えることができます Device Simulator ビューを利用できます。

ツールのプレビューは Unity でデバイス シミュレータを使用してゲームをシミュレートする

図 4. Trivial Kart を実行するデバイス シミュレータ

Trivial Kart のソースコードは games-samples ご覧ください。

UI キャンバス要素のレイアウトと正確性は、 プルダウンでデバイス オプションを選択して、[Device Simulator] ビュー メニュー:

プロジェクト設定 >プレーヤー設定 >フレーム ペーシングの最適化
図 5. デバイス シミュレータでは、エディタ内でのデバイスの変更がサポートされています。 設計上の問題を早期に発見できます。
で確認できます。 <ph type="x-smartling-placeholder">
</ph> プロジェクト設定 >プレーヤー設定 >名声のペースを最適化
図 6.事前に [Enable Pre-release Packages] チェックボックスをオンにします。 Device Simulator パッケージをダウンロードします。

Unity 向けのその他の UI 最適化手法については、次のチュートリアルをご覧ください: Unity: Unity UI の最適化

物理学

Unity には Nvidia PhysX エンジンが組み込まれています。デフォルトの設定 モバイルでは高額になることがあるため、次の点に注意してください。

  • 目標フレームレートを考慮し、それに応じて固定時間ステップを設定します。 デフォルトは 0.02ms または 50Hz に設定されています。0.03 または 30fps を目標にします
  • メッシュ コライダーを簡素化し、レイヤの競合を最小限に抑えることを検討してください。 特定のレイヤのゲーム オブジェクト間のインタラクションを決定するための行列 できます。

詳細については、 物理設定 モバイルゲーム向けの最適化について詳しくは、 電子書籍『モバイルゲームの最適化』 ダウンロードします。

プロフィール

アプリ デベロッパーは、アプリがリリースされるまでプロファイリングを見過ごしたり、無視したりすることが多々あります。 重大な障害点に到達した場合です専用の会議をスケジュール設定し、 次のベスト プラクティスに従うことをおすすめします。

  • 開発中にプロファイリングを割り当てることができる重要なポイントを特定する 無作為に当てはめて見るのではなく
  • プロファイル スナップショットを保存して Unity プロファイル アナライザ
  • 対象デバイスでゲームのプロファイリングを行い、 現在のゲームのパフォーマンスを評価できます。
  • ゲームのさまざまな部分をプロファイリングします。
  • プレーヤーのゲームプレイをプロファイリングします。(ゲームのみをプロファイリングしないでください) 通知を表示することもできます)。
  • ゲームがしばらく実行された後、プロファイルが維持モードで表示される モバイル接続時に発生する可能性のあるスロットリングの問題を デバイスが高温になっている。

次のプロファイリング ツールを個別に、または組み合わせて使用できます。

  • Unity プロファイラ: Unity Profiler は、パフォーマンスを Unity Editor でコードに対して実行可能な分析ツールと、 開発モードのビルドを実行しているスタンドアロンの Android デバイスに接続します。

  • Android GPU Inspector: Android GPU Inspector (AGI)を使用して、フレームレベルのデバッグを実行できます。AGI も GPU、CPU、メモリ、バッテリー、GPU などのシステム サービスを分析 あります

Unity でのゲームのプロファイリングについて詳しくは、こちらの動画をご覧ください。 Unity でのプロファイリングの概要 または Unity ゲームのプロファイリングに関する究極のガイド Unity からダウンロードできます。

メモリ管理

Android プロセスは、ターゲット デバイスの使用可能なメモリを共有します。すべきこと ターゲット テストデバイスに十分な空きメモリがある場合にメモリ使用量をプロファイリングする 説明します。一貫した基準でメモリテストを実行する 使用して、セッションとメモリ使用量の傾向を比較できます。 適切に分類します

C# で記述されたスクリプトで作業する場合、 文字列の比較、文字列関連のオブジェクト(JSON など)の割り当て 。これによりメモリ割り当てが頻繁に生成され、 断片化の原因となります

次の使用を検討してください: StringBuilder のインプレース連結に対する大規模な文字列操作用のクラス 文字列(例: "this" + "is" + "a" + "bad" + "idea" と StringBuilder.Concat() 関数呼び出し)。

文字列について詳しくは、このモジュールの 文字列とテキスト ご覧ください。

TextAsset と JSON テキスト リソースを優先ルールに照らして評価 ScriptableObject 型。ScriptableObjects はクロスシーン データ ストレージを処理します。 エディタからプレイ時間の変更が可能になります。

デフォルトの代替手段を使用する方法については、 モバイル最適化用の JSON ハンドルについては、記事をご覧ください ネットワーク ゲームの隠れた最適化

こちらの Memory Advice API ランタイム時のメモリ使用量を確認しますAPI 高、標準、低のメモリ使用量のストップライト インジケーターを公開します。マイページ インジケーターにサブスクライブして最新情報を得ることも、直接ポーリングすることもできます。 現在の ステータスです。赤色の信号を受け取った場合は、ゲーム オブジェクトの数を減らすことを検討してください。 キャッシュに保存されている場合ですこのコンテキストをライブでのゲーム テレメトリーに含める 運用やパフォーマンス指標のレビューを行う 必要があります

Android デバイスのメモリ構成と Unity が 対応しています。腕時計 Android のメモリ使用量を理解する(Google I/O 2018 より) メモリの問題の種類とメモリ不足の対処方法を キラーが発効します

ガベージ コレクション

マネージド メモリ環境のガベージ コレクションで未使用のメモリをクリーンアップする アプリケーションにリサイクルできるフラグメントが含まれます。フォロー ガベージ コレクションのベスト プラクティス メモリリソースの不要な割り当てを避けるためです

たとえば、オンデマンドではなく、ゲーム オブジェクト プールを 割り当て(GameObject.Instantiate)。大規模なプールの場合は 複数のフレームを割り当て エントリレベルの Android デバイスでは反応しない。

以下から呼び出される単純なコルーチンの次のコード スニペットを考えてみましょう。 : MonoBehaviour の開始:

// Option 1: Bad for memory management - causes allocation each iteration
IEnumerator UpdateEnemyTarget() {
  while (enabled) {
    yield return new WaitForSeconds(1.0f);
    // Some intermittent function check
  }
}

// Option 2: Better for memory management - allocation of yield instruction once, reused each iteration
private YieldInstruction waitForSecond = new WaitForSeconds(1.0f);
IEnumerator BetterUpdateEnemyTarget() {
  while (enabled) {
    yield return waitForSecond;
    // Some other intermittent function
  }
}

Google Chat では 編集 MonoBehaviour テンプレート ファイルを使用して、デフォルトの Start() と 誤って空のままにしないように Update() スタブ関数 重要な役割を果たします。

MonoBehaviour イベントの実行順序の概要については、以下をご覧ください。 イベント関数の実行順序 ご覧ください。メモリ管理の詳細については、このモジュールの コース Unity でのメモリ管理

モバイルゲームのパフォーマンスを最適化するヒントについては、 モバイルゲームのパフォーマンスの最適化: Unity のトップ エンジニアによるプロファイリング、メモリ、コード アーキテクチャに関するヒント

プレハブ プーリング

CPU フレーム時間の急増のほとんどは、発生中の Prefab のインスタンス化が原因 説明します。発射体用のオブジェクト プールをプレウォーミングして、 視覚効果を調整し、ゲームプレイに入ったときに 起動時の CPU の急増をなくします追加の最適化を分散させることができる 複数の「初期化フレーム」で読み込み中または シーケンスに変換できます。

サードパーティのプール アセットの多くは、Unity アセットの ストア ゲームオブジェクトのプーリング管理に 関係します独自のインタラクションを作成することもできます。詳しくは、 Unity Learn でのオブジェクト プーリングの概要

アセットの提供

アプリケーションを最初にリリースしたときのサイズに制限がある Google Play にデプロイされましたゲームのサイズや性質によっては、 ゲームリソースの一部またはすべて(キャラクター モデル、環境、 UI 要素など)に配置する必要があります。

こちらの Play Asset Delivery (PAD)サービスを使用して、インストール時にゲームに必要なアセットを管理し、 高速フォロー、オンデマンドなどです。Unity Asset Bundle が統合され、 PAD です。このツールを使用すると、配信する要素を指定できます。

アドレス指定可能

プレハブ、テクスチャ、サウンドなどの動的リソースの設定 準備すれば、実行時に複雑な操作は不要 Addressables の命名規則を確認しますアドレス指定可能 コンテンツの配置の仕方と、ビルドおよび読み込みの方法を切り離す 提供します。Addressables システムは、Resources フォルダと Asset を置き換えます。 バンドル: アセットを参照し、実行時に読み込む方法を簡素化します。

例については、 Addressables パッケージを使用したデモ プロジェクト ご覧ください。Addressables の開発について詳しくは、 Addressable Asset System(Unity ブログ)

Addressable アセット レイアウトを使用すると、 バンドルが少なすぎる場合や 共通バンドルにまとめることができますコンテンツ管理について詳しくは、 Addressables については、以下をご覧ください。 Addressables を使用してコンテンツ管理を簡素化する

1 対 1 やグループの会話での スタンドアロンのデモを行い、アクセスモードでテストして、 慣れ親しんでいただけたかと思います。また、オープンソース プロジェクトや BuildLayout Explorer for Unity 2019.3 以降 生成された buildlayout.txt レポートを調べて、 Addressables。

Unity Open Project である Chop Chop のアセットは、 すべての読み込みと取り出しに対応する Addressables システム。詳しくは、 アドレス指定可能なアセットでコンテンツをパッケージ化する |プロジェクトの Devlog を開く をご覧ください。 あります。

Chop Chop プロジェクトでは、デフォルトで読み込まれる唯一のシーンである のアセットへの直接リンクの代わりに AssetReferences を使用するように プロジェクト(シーン、プレハブなど)を作成します。

アプリケーションのソースコードは、 Unity Open Project: Chop Chop GitHub で入手できますこのプロジェクトは現在開発中ではありませんが、 git リポジトリとドキュメントは引き続き利用可能です。

サードパーティ プラグイン

Unity Asset 内のものなど、サードパーティのプラグインを使用する場合 保存する際は、フォルダを確認して不要なアセットを削除してください Resources フォルダ。ビルドプロセス時に、Unity はすべての Resources フォルダに格納されているアセットを取得し、1 つにまとめてパッケージ化します。 バンドルを作成することです。これにより、最終的なパッケージが肥大化して、 多くの場合は必要ありません

すべてのリソース フォルダをすばやく見つけるには、[リソース] プロジェクト できます。各アセットを選択すると、その中に何が含まれているか、 必要があります。

図 7. [Resources] フォルダは複数ある場合があります。 Unity Asset Store からダウンロードしたフォルダの中に潜んでいます。クリーンアップする アプリケーション バンドルにパッケージ化しないでください。

公開と保守

モバイルゲームをリリースする準備が整ったら、リリースする相手を決める リリース先、アルファ版テストとベータ版テストの実施方法、モニタリングと追跡の方法 向上させることができます

限定リリースからのフィードバックを分析する

限られたターゲット ユーザーにリリースし、より大規模なベータ版を実施できる テストするか、ゲームを有効にしてすべての市場で完全に公開する必要があります。 より広範な環境に基づいてアプリケーションのパフォーマンスを デバイスのコレクションを確認できます

たとえば、 Unity 用 Android Performance Tuner および Unity 向け Google アナリティクス アプリケーションのパフォーマンスやプレーヤーのトレンドに関する 開発チームが調整して更新を push できますまた、 分析データを使用して 続編や 同様のジャンルの関連ゲームが表示されます。

アルファ版とベータ版のテスト

Google Cloud コンソールでアプリケーション プロファイルを Google Play Console で、Google Play Console から 限られたユーザーにのみ配信し、 リリース前レビューを行います方法 最終的な問題を解決するために 事前にフィードバックを収集しておき、 グローバルリリースの対象になります

Unity ビルドは Android App Bundle を介して配布されます。詳しくは 詳しくは、 手動: Google Play に配信する Unity から、APK ファイルから AAB への変更について説明しています。 使用できます。

モニタリングと追跡

ゲームの LiveOps と配信のフェーズでは、Android Vitals などの これまでアクセスできなかったデバイスのパフォーマンスの問題を 開発とテストに集中できます詳しくは、 リーチとデバイス、Android Vitals のゲームに関する最新情報

多くの場合、大規模な開発チームには独自のカスタム ゲーム テレメトリー パイプラインがある デバイスのパフォーマンスに関する指標を確認できます。セキュリティ テレメトリーを Android Performance Tuner(APT) 対応する Unity プラグインを使って、フレームレート、 グラフィックの再現性、読み込み時間、読み込みの放棄率といった要素を考慮する必要があります。詳しくは、 手順ガイドを Android Performance Tuner を Unity ゲームに統合する

公開後もゲームのライフサイクルが止まることはありません。 パフォーマンスとフィードバックのモニタリング、維持、対応が重要 全面的にゲームが受け入れられ 好意的なレビューを獲得して 全市場