皆様、アンリアルフェスはお疲れ様でした。
懇親会等で多くの方と交流でき、とても有意義な時間を過ごすことができました。
日に日にUE4の勢いが増していっているので、ヒストリアとしても負けないように良いコンテンツを作っていきたいですね。
さて今回はUE4.9におけるパッケージング方法についてまとめてみました。
UE4におけるパッケージングの仕組みについて
UE4ではレベルを起点に、紐付くアセットをかき集めてパッケージングするという方式を取っています。
![Packaging9](https://historia.co.jp/wp/wp-content/uploads/2015/10/Packaging9-1024x530.png)
ちなみにレベルや各アセットに関して、具体的にどのアセットが紐付いているのかを確認したい場合、「アセットを右クリック」→「Asset Actions」→「Migrate」をすることで簡単に確認ができます。
以下は StarterContent に含まれている「Minimal_Default」レベルに紐付くアセットのリストです。
![Packaging03](https://historia.co.jp/wp/wp-content/uploads/2015/10/Packaging03.png)
個人制作等の小規模タイトル向けのパッケージング手法
エディタ上からパッケージングする方法がオススメです。
以前はエディタ上からのパッケージングだと強制的に全レベルを内包するようになってしまっていたため、外部アセット等に含まれている使用していないレベルですらパッケージング対象となってしまい、Migrate等を駆使してプロジェクト内の不要アセットを削除していく作業がほぼ必須となり使いにくいものでした。
どのバージョンからなのかは確認できていませんが、UE4.9ではパッケージングに含むレベルを明示的に指定できるようになっています。
プロジェクト設定を開き、Packagingタブから以下の項目を設定します。
- Cook only maps (this only affects cookall) にチェックを入れる
→これでパッケージングする際に指定のレベルのみ含まれるようにします
- List of maps to include in a packaged build にパッケージに含みたいレベルを指定する
![Packaging01](https://historia.co.jp/wp/wp-content/uploads/2015/10/Packaging01-1024x720.png)
これらの設定を行った後、「File」→「Package Project」から任意のプラットフォームを選ぶとパッケージングできます。
試しにパッケージングしてみる
以下の条件でパッケージングし、パッケージのサイズを比較してみました。
- 新規プロジェクトを作成後、無料で公開されている「Infinity Blade: Grass Lands」をプロジェクトに追加 ※サイズ検証結果をわかりやすくするためです
- プラットフォームは Windows (64-bit)
- 検証は「Cook only maps」を設定せずに全レベルを含む状態と、StarterContent に含まれている「Minimal_Default」レベルのみを含む状態
結果は以下の通りです。
|
Development |
Shipping |
全レベル |
1106 MB |
1065 MB |
Minimal_Default のみ |
297 MB |
253 MB |
サイズが大きく違っており、設定が有効になっていることが確認できます。
また、パッケージングにかかる時間も短縮することができるため、パッケージング時のみに発生するバグの確認等をする場合に、テストレベルを作って繰り返し検証することもやりやすいかと思います。
パッケージに含まれていないレベルを参照しようとしたらどうなる?
当たり前ですが、正常な挙動にはなりませんのでご注意下さい。
例えばレベルAにてレベルBを OpenLevel していた場合、パッケージにレベルBを含んでいなかったらレベルAが再読み込みされるようになります。
パッケージングに関する設定ファイルの場所
「Config」ディレクトリ内の「DefaultGame.ini」内にエディタ上から設定された内容が反映されています。
[/Script/UnrealEd.ProjectPackagingSettings]
BuildConfiguration=PPBC_Development
StagingDirectory=(Path=”D:/Blog/PackagingTest/Package”)
FullRebuild=False
ForDistribution=False
IncludeDebugFiles=False
UsePakFile=True
bGenerateChunks=False
bBuildHttpChunkInstallData=False
HttpChunkInstallDataDirectory=(Path=)
HttpChunkInstallDataVersion=
IncludePrerequisites=True
IncludeCrashReporter=True
InternationalizationPreset=English
-CulturesToStage=en
+CulturesToStage=en
DefaultCulture=en
bCookAll=False
bCookMapsOnly=True ←指定のレベルのみを含むかどうか
bCompressed=False
+MapsToCook=(FilePath=”/Game/StarterContent/Maps/Minimal_Default”) ←パッケージに含むレベル
+MapsToCook=(FilePath=”/Game/StarterContent/Maps/Advanced_Lighting”)←パッケージに含むレベル
このように設定は ini ファイルとして管理されているため、例えば指定のディレクトリ以下に含まれる全レベルを集め、ini ファイルの中身を書き換えるようにすることでパッケージ設定への追加漏れを防ぐツール等も作ることは可能です。
次回は ProjectLauncher からのパッケージングや、Jenkins等からも実行できるようにバッチ化の方法について書く予定です。