Unreal プロジェクトをユーザーに配布する前に、適切にパッケージ化する必要があります。 パッケージ化処理することで、全コードとコンテンツを最新の状態に保ち、目的のターゲット プラットフォームで実行可能な適切なフォーマットにします。
パッケージ化プロセスには複数のステップが含まれています。 プロジェクト固有のソース コードがまず最初にコンパイルされます。 コードがコンパイルされると、すべての必要なコンテンツをターゲット プラットフォームで利用できるフォーマットに変換、すなわち「クック処理」します。 その後、コンパイル済みのコードとクック処理済みのコンテンツは、Windows インストーラなどの配布可能なファイル セットにまとめられます。
メイン メニューの [File (ファイル)] に、サブメニューを含む [Package Project (プロジェクトをパッケージ化)] オプションがあります。 サブメニューには、プロジェクトのパッケージ化をサポートしているすべてのプラットフォームの一覧が表示されます。
Android のパッケージ化に関しては、複数の選択肢があります。 詳細については、「Android の開発リファレンス」を参照してください。
[Advanced (詳細)] オプションの中には、パッケージ化を開始する前に設定することが可能なものもあります。
ゲームのデフォルト マップを設定する
ゲームをパッケージ化する前に、まずパッケージ化されたゲームの開始時に読み込まれる [Game Default Map (ゲームのデフォルト マップ)] を設定する必要があります。 マップを設定せずにブランク プロジェクトを使用すると、パッケージ化されたゲームの開始時に黒い画面しか表示されません。 ファースト パーソンやサード パーソンなどのテンプレート マップを使用すると、開始マップが読み込まれます。
[Game Default Map] を設定するには、エディタのメイン メニューで、[Edit (編集)] > [Project Settings (プロジェクト設定)] > [Maps & Modes (マップ & モード)] をクリックします。
パッケージを作成する
特定のプラットフォーム向けにプロジェクトをパッケージ化するには、エディタのメイン メニューで [File] > [Package Project] > [プラットフォーム名] の順にクリックします。
ターゲット ディレクトリを選択するためのダイアログが表示されます。 パッケージ化が完了すると、選択したディレクトリにパッケージ化されたプロジェクトが格納されます。
ターゲット ディレクトリを確認すると、選択したプラットフォーム用にプロジェクトをパッケージ化する実際のプロセスが開始されます。 パッケージ化は時間がかかる場合があります。バックグラウンドで実行されるので、エディタをそのまま使用することができます。 進行状況を示すステータス インジケータがエディタの右下隅に表示されます。
ステータス インジケータにはパッケージ化を停止する [Cancel] ボタンもあります。 さらに、[Show Log (ログを表示)] リンクを使って、出力ログ情報を展開表示することができます。パッケージ化の失敗原因の解明や製品に潜むバグの兆候の発見につながります。
エラーや警告など非常に重要なログ情報は、通常の [Message Log (メッセージ ログ)] ウィンドウにも記録されます。
こうしたウィンドウがいずれも表示されない場合は、[Window (ウィンドウ)] > [Developer Tools (デベロッパーツール)] > [Output Log (アウトプットログ)] / [Message Log (メッセージログ)] オプションからアクセスできます。
分布
iOS あるいは Android ゲームを App Store や Google Play Store にサブミットするには、ご自分のパッケージを Distribution モードで作成する必要があります。 そのためには、[Packaging (パッケージング)] メニューの [Packaging Settings (パッケージング設定)] オプションに移動し、[Distribution (配信)] チェックボックスをオンにします。
iOS の場合、Apple の Developer サイトでディストリビューション証明書および モバイル プロビジョニングを作成する必要があります。 Development certificate (開発用証明書) と同じようにディストリビューション証明書をインストールし、既存のファイルの隣に「Distro_」プレフィックスを付けた名前でディストリビューション プロビジョニングを作成します (Distro_MyProject.mobileprovision と MyProject.mobileprovision が両方できます)。
Android の場合、.apk ファイルに署名するキーを作成し、SigningConfig.xml というファイルでビルド ツールに情報を提供する必要があります。 このファイルはインストール済みの「Engine」ディレクトリ (Engine/Build/Android/Java/) にあります。 このファイルを編集すると、すべてのプロジェクトに適用されます。 ただし、このファイルをプロジェクトの Build/Android/ ディレクトリ (Java/ サブディレクトリなし) にコピーすれば、そのプロジェクトだけで使用することができます。 キーを生成し、ファイルに入力する手順は、ファイルそのものの中に入っています。
詳細設定
メイン メニューで [File (ファイル)] > [Package Project (プロジェクトをパッケージ化)] > [Packaging Settings (パッケージング設定)] または [Edit (編集)] > [Project Settings (プロジェクト設定)] > [Packaging (パッケージ化)] の順にクリックすると、パッケージ化機能の詳細設定オプションが表示されます。
現時点では以下のオプションを使用することができます。
| オプション | 説明 |
|---|---|
Build Configuration (ビルド コンフィギュレーション) | コードベースのプロジェクトをコンパイルするビルドのコンフィギュレーションを設定します。 コード プロジェクトをデバッグするには、[DebugGame] を選択します。 デバッグ サポートが最小限であるほとんどの開発で、より優れたパフォーマンスを求める場合は [Development (開発)] を選択します。 デバッグ情報を含まず、デバッグ指向の機能 (デバッグ形状の描画、画面上のデバッグ メッセージの出力など) も含まない最終的なシッピング用ビルドには、[Shipping (シッピング)] を選択します。 ブループリントのみのプロジェクトには、このオプションはないことに注意してください。 |
Staging Directory (ステージング ディレクトリ) | パッケージ化したビルドを格納するディレクトリです。 ターゲット ディレクトリの選択時に別のディレクトリを選択すると、このオプションは自動的に更新されます。 |
Full Rebuild (完全にリビルド) | 全コードをコンパイルするか否かを設定します。 無効な場合、修正されたコードのみがコンパイルされます。 これによりパッケージ化処理が迅速化する場合があります。 シッピング ビルドは、ビルド漏れや古いコンテンツを含まないためにも常にフルの再ビルドを実行してください。 このオプションはデフォルトでオンになっています。 |
Use Pak File (Pak ファイルを使用) | 個々のファイルまたは単一パッケージとしてプロジェクトのアセットをパッケージ化処理するか否かを設定します。 有効な場合、各ファイルすべてをコピーする代わりに、全アセットを単一の「.pak」ファイルに格納します。 プロジェクトにたくさんのアセットファイルがある場合、Pak ファイルを使用した方が配布が容易になる場合があります。転送する必要があるファイル数が減るからです。 このオプションはデフォルトではオフになっています。 |
Generate Chunks (チャンクの生成) | インストールのストリーミングで使用可能な .pak ファイルのチャンクを生成するかどうかを設定します。 |
Build HTTP Chunk Install Data (HTTP チャンク インストール データのビルド) | HTTP チャンク インストーラ向けにデータを生成するかどうかを設定します。 これにより、ランタイム時にインストールするようにウェブ サーバー上でデータをホストすることができます。 |
HTTP Chunk Install Data Directory (HTTP チャンク インストール データ ディレクトリ) | データをビルドすると保存されるディレクトリです。 |
HTTP Chunk Install Data Version (HTTP チャンク インストール データ バージョン) | HTTP チャンク インストール データのバージョン名です。 |
Include Prerequisites Installer (前提条件のインストーラを含む) | 再配布可能なオペレーティング システムのコンポーネントなど、パッケージ化処理したゲームの必須条件のインストーラを含むかどうかを指定します。 |
Directories to Always Cook (常にクックするディレクトリ) | ファイルを常にクックする必要があるディレクトリのリスト。 デフォルト設定では、パッケージ化機能がゲームで参照するすべてのコンテンツを自動的に検知してクックします。 カスタム仕様のスレート UI 用のテクスチャなど、一部の必須コンテンツは直接参照されない場合があります。 そのようなコンテンツが存在するディレクトリもここにリストして、パッケージに含める必要があります。 |
符号化と暗号化
Unreal Engine 4.22 のリリースで、デスクトップ プラットフォーム (Windows、Mac、Linux) 向けに業界標準の OpenSSL ライブラリを統合しました。
シッピング製品で配布する場合、通常はデータの解凍またはデータ改ざん防止のために .Pak ファイルは符号化または暗号化することができます。 プロジェクトで暗号化機能をアクティブ、非アクティブ、または調整するには、[Project Settings (プロジェクト設定)] メニューから [Crypto (暗号化)] セクションを開きます。
このメニューでは以下の設定を利用できます。
| オプション | 説明 |
|---|---|
Encrypt Pak INI Files (Pak ini ファイルの暗号化) | プロジェクトの |
Encrypt Pak Index (Pak インデックスの暗号化) |
|
Encrypt UAsset Files (UAsset ファイルの暗号化) |
|
Encrypt Assets (アセットの暗号化) |
この設定は実行時のファイルの I/O パフォーマンスに対して重大な影響を及ぼし、最終的なパッケージング データのエントロピーが増し、配布およびパッチ システムの効率が悪くなることに注意してください。 |
Enable Pak Signing (Pak 署名の有効化) | .pak ファイルの署名をアクティブ化または非アクティブ化します。 |
さらに、符号化または暗号化のキーを設定あるいは消去できます。
コンテンツのクック
デベロッパーとして新規または修正したゲーム コンテンツをイタレーションする時に、まずステージン グディレクトリへすべてをパッケージ化処理し、その後そこから実行するという冗長な処理を行いたくない場合もあることでしょう。 そのような場合、[File] > [Cook Content] > [プラットフォーム名] の順に選択してクリックすることで、パッケージ化処理を行うことなく、特定のターゲット プラットフォームのコンテンツのみをクックすることも可能です。
この機能は、プロジェクトのローカルのデベロッパーのワークスペースにあるコンテンツを更新し、ステージング ディレクトリにアセットをコピーしません。ご注意ください。 イテレーションを迅速に行うために、ローカルのデベロッパー ワークスペースから直接ゲームを実行することができます。
ロード時間を最適化する
オープン ワールドのゲームではロード時間が短いことが不可欠ですが、あらゆるタイプのゲームでもこれは価値があります。 Unreal Engine では、パッケージ化処理中のプロジェクトのロード時間を最適化する方法がいくつかあります。 ゲームのロード時間を短縮する推奨方法を以下に示します。 プロジェクトをパッケージ化する方法については、「ゲームのパッケージングとクック」セクションを参照してください。
Event Driven Loader (EDL) と Asynchronous Loading Thread (ALT) を使用する
Asynchronous Loading Thread (ALT) はデフォルトでオフになっていますが、[Project Settings] メニューの [Engine] > [Streaming (ストリーミング)] セクションでオンにすることができます。 修正したエンジンでは一部微調整が必要になるかもしれませんが、一般的に ALT のロード速度は 2 倍になります (事前のロード時間があるゲームと絶えずデータをストリーミングするゲームを含む)。 ALT はシリアライズとポスト ローディング コードを 2 つの個別のスレッドで同時に実行することで機能します。その結果、ゲーム コード内の
UObjectクラス コンストラクタ、PostInitProperties関数、およびSerialize関数がスレッドセーフでなければならないという要件が加わります。 アクティベートすると、ALT によってローディングが 2 倍速くなります。 非同期ローディング (C++) の使用については、「アセットの非同期ロード」を参照してください。Event-Driven Loader はデフォルトでオンになっていますが、[Project Settings] メニューの [Engine] > [Streaming] セクションでオフにすることができます。 ほとんどのプロジェクトにおいて、EDL はロード時間を半分に短縮します。 EDL は安定していて Unreal Engine の古いバージョンに移植することができます。または改良、カスタマイズしたエンジン バージョン向けに微調整することができます。
.pak ファイルの圧縮
プロジェクトで
.pakファイルの圧縮を使うには、[Project Settings (プロジェクト設定)] を開いて [Packaging (パッケージ化処理)] セクションを探します。 このセクションで、[Packaging] の見出しの advanced (詳細) 部分を開いて、表示される [Create compressed cooked packages (圧縮されたクック ページの作成)] のチェックボックスにチェックを入れます。ほとんどのプラットフォームには自動圧縮機能はなく、
.pakファイルを圧縮するとロード時間が短縮されますが、以下のように考慮すべき特殊なケースがあります。
| プラットフォーム | 推奨事項 |
|---|---|
Steam | Steam ではユーザーがダウンロードしているときにファイルを圧縮します。そのため、最初のダウンロード時間は圧縮されているゲームの .pak ファイルによる影響を受けません。 ただし、Steam の差分パッチ システムの方が圧縮されていないファイルの場合はうまく機能します。 圧縮 .pak ファイルはカスタマーのシステムの空間を節約しますが、パッチの場合はダウンロード時間が長くなります。 |
Oculus |
|
pak ファイルの順序付け
.pak ファイルを適切に順序付けすることは、ロード時間を短縮するうえで重要です。 .pak ファイルを最適に順序付けするために、UE4 にはデータ アセットを必要とする順序を見つけるツール一式があり、高速でロードするパッケージをビルドします。 概念上はこのプロセスはプロファイルによる最適化に似ています。 .pak ファイルを順序付けするには以下の手順に従います。
パッケージ化したゲームを
-fileopenlogコマンドライン オプションを使ってビルドし実行します。このオプションは、エンジンにファイルを開く順序を記録させます。ゲームのすべての主要エリアに対して行ないます。 すべてのレベル、プレイ可能なキャラクター、武器、ビークルなどをロードします。 すべてがロードされたら、ゲームを終了します。
デプロイしたゲームに
GameOpenOrder.logというファイルがあります。 これには .pak ファイルの順序を最適化するために必要な情報があります。 たとえば、Windows のビルドでは、このファイルはWindows/(YourGame)/Build/Windows/FileOpenOrder/にあります。 このファイルを/Build/Windows/FileOpenOrder/パスの development ディレクトリにコピーします。 Mac のビルドでは、このファイルはMacNoEditor/(YourGame)/Build/WindowsNoEditor/FileOpenOrder/にあります。 このファイルをBuild/Mac/FileOpenOrder/パスの development ディレクトリにコピーします。ログ ファイルができたら、
.pakファイルを再ビルドします。 これと今後生成される.pakファイルはログ ファイルに示されているファイルの順序を使用します。
制作環境では、ログ ファイルはソース コントロールにチェックインされ、新しい -fileopenlog の実行結果を使って定期的に更新されます。これには、ゲームの出荷準備が整った最終実行が含まれます。