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 (開発用証明書) と同じようにディストリビューション証明書をインストールして、もう 1 つのファイルの隣に「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 ファイルを使用した方が配布が容易になる場合があります。転送する必要があるファイル数が減るからです。このオプションはデフォルトで無効になっています。 |
Generate Chunks | インストールのストリーミングで使用可能な .pak ファイルのチャンクを生成するかどうかを設定します。 |
Build Http Chunk Install Data | HTTP チャンク インストーラ向けにデータを生成するかどうかを設定します。これにより、ランタイムにインストールするようにウェブ サーバー上でデータをホストすることができます。 |
Http Chunk Install Data Directory | データをビルドすると保存されるディレクトリです。 |
Http Chunk Install Data Version | HTTP チャンク インストール データのバージョン名です。 |
Include Prerequisites Intaller | 再配布可能なオペレーティング システムのコンポーネントなど、パッケージ化処理したゲームの前提条件のインストーラを含むかどうかを指定します。 |
符号化と暗号化
Unreal Engine 4.22 のリリースで、デスクトップ プラットフォーム (Windows、Mac、 Linux) 向けに産業標準の OpenSSL ライブラリを統合しました。
出荷製品で配布する場合、通常はデータの解凍またはデータ改ざん防止のために .Pak
ファイルは符号化または暗号化することができます。プロジェクトで暗号化機能をアクティブ、非アクティブ、または調整するには、[Project Settings (プロジェクト設定)] メニューから [Crypto (暗号化)] セクションを開きます。
このメニューでは以下の設定を利用できます。
オプション | 説明 |
---|---|
Encrypt Pak INI Files | プロジェクトの .pak ファイルにあるすべての .ini ファイルを暗号化します。これは、プロダクトのコンフィギュレーション データが簡単に取り出されたり、改ざんされるのを最小限のランタイム コストで防ぎます。 |
Encrypt Pak Index | .pak ファイルのインデックスを暗号化します。UnrealPak が開かれ、表示され、プロダクトの .pak ファイルがアンパックされるのを最小限のランタイム コストで防ぎます。 |
Encrypt UAsset Files | .pak ファイルの .uasset ファイルを暗号化します。uasset ファイルには内部のアセットに関するヘッダー情報が含まれますが、実際のアセット データ自体は含まれません。このデータを暗号化するとデータのセキュリティは高まりますが、ランタイム コストが若干増え、データ エントロピーが増えて、パッチサイズが大きくなります。 |
Encrypt Assets |
この設定は実行時のファイルの I/O パフォーマンスに対して重大な影響を及ぼし、最終的なパッケージング データのエントロピーが増し、配布およびパッチ システムの効率が悪くなることに注意してください。 |
Enable Pak Signing | .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 ファイルの圧縮をオンにしません。Oculus のパッチ システムは圧縮された .pak ファイルを適切に処理することができません。また、.pak ファイルを圧縮してもファイルサイズは小さくなりません。 |
pak ファイルの順序付け
.pak
ファイルを適切に順序付けすることは、ロード時間を短縮するうえで重要です。.pak
ファイルを最適に順序付けするために、UE4 にはデータ アセットを必要とする順序を見つけるツール一式があり、高速にロードするパッケージをビルドします。概念上はこのプロセスはプロファイルによる最適化に似ています。.pak
ファイルを順序付けするには以下の手順に従います。
-
パッケージ化したゲームを
-fileopenlog
コマンドライン オプションを使ってビルドし実行します。このオプションは、エンジンにファイルを開く順序を記録させます。 -
ゲームのすべての主要エリアに対して行ないます。すべてのレベル、プレイ可能なキャラクター、武器、ビークルなどをロードします。すべてがロードされたら、ゲームを終了します。
-
デプロイしたゲームに
GameOpenOrder.log
というファイルがあります。これには .pak ファイルの順序を最適化するために必要な情報があります。例えば、Windows のビルドでは、このファイルはWindows/(YourGame)/Build/Windows/FileOpenOrder/
にあります。このファイルを/Build/Windows/FileOpenOrder/
パスの development ディレクトリにコピーします。デプロイしたゲームに
GameOpenOrder.log
というファイルがあります。これには .pak ファイルの順序を最適化するために必要な情報があります。例えば、Mac のビルドでは、このファイルは「MacNoEditor/(YourGame)/Build/WindowsNoEditor/FileOpenOrder/
」にあります。このファイルを「/Build/MacNoEditor/FileOpenOrder/
」パスの development ディレクトリにコピーします。 - ログ ファイルができたら、
.pak
ファイルを再ビルドします。これと今後生成される.pak
ファイルはログ ファイルに示されているファイルの順序を使用します。
制作環境では、ログ ファイルはソース コントロールにチェックインされ、新しい -fileopenlog
の実行結果を使って定期的に更新されます。これには、ゲームの出荷準備が整った最終実行が含まれます。