[Unreal Engine] プロジェクトランチャーでパッケージ化する 4章 ~パッケージ化イテレーションの高速化~
!検索などでこちらに飛んできてプロジェクトランチャーの使い方を知らない方は前章を先にお読みください。前提となる話(設定)が出ています!
パッケージ化を速くする必要性
この章では、パッケージ化した後の「ゲームのロードの速さ」「データの安全性」などを犠牲にして、とにかくパッケージ化のイテレーション(反復)を高速化するプロファイル設定の仕方を紹介しますが、その前に(1章ではパッケージ化を高速化する理由を書きましたが)、ここでは初心者の方が知っておくべきこととして、高速パッケージ化のもう一つの必要性について書きます。
UnrealEngineにおいて、エディタ版ゲームとパッケージ版(Shipping)ゲームとでは処理の仕方が微妙に異なります。(実際にそれぞれのアクタのBeginPlayやTickノードなどの実行順序が異なります。気になる方は最後の参考リンク(BeginPlayの実行順について)を参照。)それで、エディタ版では正常に動作していても、(例えエラーが無くとも)パッケージ版ではゲームがうまく動かなくなったり、グラフィックの見え方が変わってしまったりすることがあります。
そうなると作り手の意図通りのものをユーザーに届けるためには、ゲームの最終的な形態であるShipping版の調整のためにパッケージ化のテストを繰り返す場面が出てくることもあるでしょう。
そのような時には、実際の配布ではない、テストとしてのパッケージ化はできるだけ高速に、(必要なら)回数を増やしたいと思うはずです。その時に通常のパッケージ化設定で流していては時間と計算の無駄なので、設定をそれ用に変えてしまった方が得策です。(もっとも、これでも時間がかかる場合は、一度軽いテストプロジェクトでテスト対象の部分だけを作成して、そちらでパッケージ版の調整テストを行い結果を手に入れるのが良いです。)
幸いなことにプロジェクトランチャーはプロファイル設定が保存されるので、設定を変更するのではなく、もう一つの、高速パッケージ化用のプロファイルを追加することにしましょう。
高速パッケージ化用プロファイルの作成
ここでは「Shipping Test Iterative」というプロファイル名にしてみました。
次は高速化用に見るべきポイント(主に「クック」の「詳細設定」以降)を順に追っていきます。(前章と同じく、触れていない項目については基本的に下の画像の通りの設定にしてください。また、パッケージ化時間の話は全て、あくまでも筆者の小規模プロジェクト(レーシングゲーム)でのテスト結果です。あしからず。)
クックの詳細設定
1.イテラティブクッキング:前回のクックから変更されたコンテンツだけクック(Iterative Cooking:Only cook content modified from previous cook)
これが最も重要な項目で、チェックを入れます。変更したコンテンツのみがクック対象となるので、ほとんどがクック済の場合にスピードがグッと上がります。(これは通常でもONのままで良いかもしれませんが、何かアセットを削除したり、大きな変更があった場合等は(あるいは定期的に)一度オフにするとよいかもしれません)
2.コンテンツを圧縮(Compress Content)
こちら筆者の小規模なレースゲームプロジェクトで検証した結果、圧縮にはほとんど時間がかからなかった(0秒)のでONのままでも大丈夫かもしれません。(小規模でない場合は一度差が出るか試してみてください。)ただし、この後にある「UnrealPakに格納」と一緒にチェックを入れた場合にはCPU使用率が一時的に100%になり、パッケージ化に著しく時間がかかるようになりました。(検証結果では20秒→72秒なので3.5倍強)ディスク容量の圧迫の観点からこの「コンテンツを圧縮」にチェックを入れ、「UnrealPakに格納(+I/Oストア)」にはチェックを入れないようにします。(機密性とスピードを重視する場合は逆(コンテンツ圧縮なし+UnreakPak格納(+I/Oストア)+暗号化)がいいでしょう。)
3.バージョン情報なしでパッケージを保存する(Save Packages Without Versions)こちらはオフにしないとイテラティブクッキングができませんのでオフにします。
4.すべてのコンテンツを単一ファイル(UnrealPak)に格納します(Store all content in a single file (UnrealPak) )
「コンテンツを圧縮」項目に書いた通り、オフにします。ちなみに筆者の環境ではオンにするとCPU使用率が一時的に100%になり、パッケージ化時間が少し伸びました。(20秒→22秒)
5.iniファイルの暗号化(pakファイルと使用する場合のみ)(Encrypt ini files (only with use pak file))↑がオフなので基本的にオフですが、「コンテンツを圧縮」項目の最後に書いたように、機密性とスピードを重視する場合は圧縮なし+UnreakPak格納(+I/Oストア)+暗号化(オン)という形に。筆者のプロジェクトでは暗号化自体に時間(+0秒)はかかりませんでした。
次はパッケージ項目です。
パッケージ
「このビルドは一般配布用ですか(Is this build for distribution to the public)」
これはオフでも構いませんが、筆者的にはオン推奨。(なぜかと言うと、筆者の環境ではチェックを入れた方が何故か1~2秒速くなるという結果が出ているので🤔)
「パッケージ化したゲームの前提条件にインストーラを含めます(Include an installer for prerequisitea of packaged games)」
テスト用パッケージ化なので要らないでしょう。オフです。(筆者の環境では40MB弱削減されていました。インストーラの有無で特にパッケージ化時間に差はありませんでした。(0秒))
「ローディングの最適化(I/Oストア)にコンテナファイルを使用する(Use container files for optimized loading (I/O Store))」
基本的にオフです。この項目は「UnrealPakに格納」と連動するので基本的に触らない(オフにする)ようにしましょう。連動しているので、一度チェックを入れて元に戻す場合は、もう一方の項目の確認も怠らないようにしてください。ちなみに筆者の環境ではオンにするとCPU使用率が一時的に100%になり、パッケージ化時間が少し伸びました。(22秒→24秒)
高速パッケージ化の設定は以上です。
右上の「戻る」ボタンを押して高速パッケージ化用のプロファイルの起動ボタンを押してみましょう!
(少なくとも2回目以降は)パッケージ化がいつもより手早く済むようになっているはずです。
是非お試しください!
おまけ
今回パッケージ周りのことを調べて気づいたこと書き残しておきます。プロジェクトフォルダの中の「Saved」内の「Cooked」「StagedBuilds」フォルダは、ゲームを作っていればGB単位の容量の大きなフォルダになっていることが多いはずです。しかし、これらはパッケージ化の過程で再生成されるので、(プロジェクトファイルの中身の)「保存」だけが目的の場合、消しても無問題です。(完全な知識があるわけではないので、消す際は自己責任でよろしくお願いします。m(_ _)m 少なくとも筆者の環境では消しても何も問題ありません。)
他、プロジェクトフォルダの中の「Intermediate」フォルダも消して大丈夫、という話も聞きますが・・・(このフォルダについてはよく知りませんが、その中で容量のある「Build」フォルダもパッケージ化過程で再生成されます。・・・そして消しても問題が起こらないのを確認しています。)
差分ファイルを保存というバックアップ方法もありますが、それについての知識が十分でないうちはプロジェクトフォルダのフルバックアップを取っておくというのも、もう一つのバックアップ手段としてあって良いと思っています。その際、サイズを小さくしておけることにこしたことはありません。
プロジェクトフォルダのバックアップ時に、この豆知識が役に立ったら幸いです。
記事は以上になります。
・・・・・・
謝辞
今回この記事を作成するにあたって、ヒストリアさん、O_Y_Gさんをはじめ、他の多数の記事を紹介・使用させていただきました。どうもありがとうございました!
記事に関し、もし何か問題がある場合はご連絡頂けますと幸いです。
・・・・・・
この記事役に立ったよ!という方は「いいね」などよろしくお願いします。
---------------------------------------------------------------------
1章
[Unreal Engine] プロジェクトランチャーでパッケージ化する
~パッケージ化テストについて~
https://note.com/yu_rien/n/n3460087e16ba
2章
[Unreal Engine] プロジェクトランチャーでパッケージ化する
~パッケージ化のバグについて~
https://note.com/yu_rien/n/n523b5871ac13
3章
[Unreal Engine] プロジェクトランチャーでパッケージ化する
~プロジェクトランチャーを使う~
https://note.com/yu_rien/n/nf892f6d1182c
---------------------------------------------------------------------
参考リンク
Unreal Engine でのプロジェクト ランチャーの使用方法 | Unreal Engine 5.0 ドキュメント
【UE5】BeginPlayの実行順について (zenn.dev)