この記事では「UnrealEngine4のお勉強③DLC機能を実装する」で作成したプロジェクトをもとに、
DefaultPakfileRules.iniファイルの使い方について説明していきます。
UE4のPrimaryAssetLabelやpak分割についてまだわからないという方は先にそちらの記事をお読みください。
はじめに
さて、先述の記事ではPrimaryAssetLabelを用いてプロジェクト内のコンテンツを以下の3つに分けました。
- pakchunk0.pak
- pakchunk1.pak
- pakchunk2.pak
そして
apkにはpakchunk0.pak
dlcにはpakchunk1.pakとpakchun2.pak
がそれぞれ入っている状態です。
ちなみにですが、pakファイルの中身を確認したい場合は、
Epic Games\UE_4.24\Engine\Binaries\Win64にあるUnrealPak.exeを使って
コマンドプロンプトで下記のように実行すると取得することができます。
UnrealPak.exe -list [対象のpakファイルへのパス]
DefaultPakFileRules.iniの機能
名前の通り、pakファイル生成時のルールに関するiniファイルで、
現状自分が試してできたことは下記です。
- ChunkIDの設定を上書きすることができる
- ビルド時のパッケージングの対象から外すことができる
- プロジェクト内、エンジン内、すべてのファイルに対して設定可能
- ビルドプラットフォーム、コンフィギュレーションごとに設定可能
使い方や記述の説明はエンジン内の下記ファイルに記載があります。
Epic Games\UE_4.24\Engine\Config\BasePakFileRules.ini
使い方
まず、プロジェクトのConfigディレクトリ内にDefaultPakFileRules.iniというファイルを作成します。
そしてそのiniファイルの中にどんどん設定を書き加えていきます。
1.特定のファイルのChunkIDを変更する
[OverrideWBP]
bOverrideChunkManifest=true
OverridePaks="pakchunk0"
Platforms="Win64"
Targets="Development"
+Files=".../DlcSample/Content/pak1/WBP_LevelPak1.uasset"
+Files=".../DlcSample/Content/pak2/WBP_LevelPak2.uasset"
上記の設定は、ChunkID=1とChunkID=2にそれぞれ設定した
WBP_LevelPak1.uassetとWBP_LevelPak2.uassetを
ChunkID=0に上書きします。
UnrealPak.exe -listで確認すると、どちらのファイルもpakchunk0.pakに含まれていることがわかります。
(結果を貼るのはめんどくさいのでご自身でご確認お願いします)
例えばこのように変更すればpak1以下をまるっとChunkID=0に変更して、pakchunk1.pakはなくなります。
+Files=".../DlcSample/Content/pak1/*"
2.特定のファイルをパッケージの対象から除外する
[ExcludeWBP]
bOverrideChunkManifest=true
bExcludeFromPaks=true
Platforms="Win64"
Targets="Development"
+Files=".../DlcSample/Content/pak1/WBP_LevelPak1.uasset"
+Files=".../DlcSample/Content/pak2/WBP_LevelPak2.uasset"
上記の設定は、ChunkID=1とChunkID=2にそれぞれ設定した
WBP_LevelPak1.uassetとWBP_LevelPak2.uassetを
パッケージから除外します。
UnrealPak.exe -listを用いて中身を見ると、どちらもpakファイル内に含まれていないことがわかります。
(結果を貼るのがめんどくさい(以下略
3.プロジェクト内、エンジン内、すべてのファイルに対して設定可能
こちら今までの例で指定していたファイルの個所をPlginsに変更すればプラグインを
+Files=".../DlcSample/Plugins/hogehoge"
Engineに変更すればエンジン内のコンテンツを
+Files=".../Engine/Content/hogehoge"
それぞれ設定の変更を実施することが可能です。
終わり
ちょっと説明がいきない手抜きになってしまった感ありますが、DefaultaPakFileRules.iniは便利な設定ファイルだと思っています。
次回バージョンアップに必要なコンテンツをプロジェクトに入れたけどまだ公開したくない場合、
androidで利用したけどiOSでは利用していないプラグインをそれぞれパッケージから外したい場合、
などなど、プロジェクトをいじらずにiniファイルからその設定をちょこちょこっといじれます。