UE4でのリリース、パッチ、DLC作成の暫定版手順メモ

More than 3 years have passed since last update.


はじめに

UE4では4.9(現在UE4.9Pre4)にて通常のShippingビルド以外にPJのリリース用のPak作成やパッチ、DLCの作成が可能となります。

といっても、記事を書いている時点だと公式のDocではつい最近ページが作成されたばかりですし、

何よりも今後まだ変更がある可能性もありえる為、2015/08末時点で調べて分かった事の暫定版という形でやり方を纏めておきます。

なので、取り急ぎ新機能を試してみたい人向けの話です。


ベースとなる資料

以下の資料を参考にあれやこれやすれば普通に作成できます。

公式:

・リリース関連

https://docs.unrealengine.com/latest/INT/Engine/Deployment/Releasing

・パッチ関連

http://docs.unrealengine.com/latest/INT/Engine/Deployment/Patching

公式Wiki;

・Mod(DLC)関連

https://wiki.unrealengine.com/Modding:_Adding_mod-support_to_your_Unreal_Engine_4_project

今回は、Wikiに掲載されているサンプルをベースに気付いた点を追加して記載します。

※当然ですが、手探りの状態なので間違いあるし以降の版数では使えない可能性もあるので注意。

あと、恒例のように記事が長いので読むのが面倒な人は、上記3つの資料を参考にささっと自分で進めて頂いた方がいいです。

以下、すべてを一つの記事まとめた結果、常識外な長文で記事を作成してしまったため、暇な人がじっくり読む向けの内容です。



リリース、DLC、パッチについて(※個人的なイメージ)

どれもプロジェクトランチャーからカスタムプロファイルを作成し実行することになりますが、

各作成手順における私個人のイメージは以下です。


リリース

リリースポイントに合わせてベースとなるPakを作成する。

後にDLCやパッチのベースとなる版数になるため、パッチ及びDLC作成には必ず必要な工程です。

これまで一般的だったパッケージビルドではリリースポイントを設定・保持できない(多分?)が、その時点で最新のパッケージを作成する意味では概ね同じ意味合いかと思います。

ただし、リリースではExeなど実行ファイルは作成されない?(もしかするとプロファイルの設定次第かも?)ようなので、パッケージビルドと合わせてある実施するのかなと想定。(※ただしこの使い方があっているかは未確認ですが)

生成されるPakは「Release」フォルダ配下にできます。


DLC

家庭用ゲームでも追加コンテンツとして存在するDLCと同じ意味合いです。

PJ内での管理方法は、プラグインとしてDLC用の追加アセットを管理します。

DLCのpak作成(リリース)するにはベースとなるリリース版数を選択し実行する必要がある。

同時にプラグイン(DLC)の名称をプロファイルに設定することで、そのDLC名称と同じプラグインだけに含まれるcontent全てを追加パッケージとしてリリースされる形と私は理解しています。

ちなみに、今回の様にDLCを向けに用意したプラグインの設定であれば、通常のパッケージビルドには該当アセットが一切含まれない仕様?(今回の調査結果からの知見)のため、このような実装・管理方法ができるのだと思います。

生成されるPakは「各DLCと紐づくプラグイン」フォルダ配下にできます。


パッチ

DLCと違い、通常通りcontentBrowser上にてアセットをこれまで通り管理するが、ベースとなるリリース版数に含まれてない機能や変更があったアセットを追加パッケージとして作成するものと私自身理解しています。(※この辺りはもう少し裏付け調査が必要)

これまで実施していたShippingなどのパッケージビルドではその時点での環境全てを全部入りパッケージとして新規作成していた工程とは異なる感じと思っています。

生成されるPakは「Saved/StagedBuilds」フォルダ配下にできます。

まあ私個人の理解ではこんな感じかなと考えています。

なので上記の記載の通り、DLCやパッチを作成するには必ず事前にリリースを実施しておかないとNGになります。

あとDLCではプラグインでアセット管理が必要といっていますが、DLCでの用途であればC++知識・環境は不要で、単純にDLC用アセットだけを専用フォルダで管理する用途でプラグインの形式を使っていそうです。

※ただし、DLC用に管理するので通常パッケージビルドに含まれないので注意

では実際に作り方の大雑把な説明です。



リリースの作成手順(調査結果)


①ProjectLauncher 起動

適当なPJを用意し(ここでは最初に記載したwikiで公開されているPJ「ModSampleGame」をGithubからDLし使用しています)、

メニューないし起動から「ProjectLauncher」画面を起動します。

(この手順は、パッチ、DLCでも共通です)

5_open_projectLuncher.jpg

上記画像の様にPCだったりHTMLだったり既に設定ファイルが幾つか上部ありますが、今回使うのは下部の「カスタム起動プロファイル」になります。

既に幾つかプロファイルが作成済みの画像ですが、こんな感じのプロファイルを幾つか作っておくだけです。

ただし、複製が出来ないので毎回位置から「+」を選択し設定する必要があります。


②プロファイルの作成・編集

新規追加し、編集画面を起動すると現時点でのDefaultが以下の画像っぽい感じになるはずです。

例えば、クックのオンザフライではダメですし、大半の変更が必要です。

順をおって幾つか設定例をベースに説明します。

5_projectluntcher_newprof.jpg


ビルド設定

リリース時の設定を例にビルド設定をざっと説明。

10_DLC_MyFirstMod_build.jpg

上記の画像の様に、まず、プロファイルをどのPJで有効にするか設定します。

ここでは面倒なのであまり考えず、デフォルトの「任意のプロジェクト」にしてます(要は共通プロファイルに設定)

ビルド項目で、ビルド有効に設定し、コンフィグレーションを用途に合わせて変更します。

(ここでは、Shippingとしています)

詳細設定のUATをビルドするは、実のところイマイチ判っていません。(Doc見ても必要ならばに見えますし・・)


クック設定

先の画像にも載っていますが、「バイザブック」に変更し、プラットフォームを選択します。

(Windows向けなら「WindowsNoEditor」かと)

40_pjlunch_rel_10_cock.jpg

次に「リリース・DLC・パッチの設定」を有効にする。

(これは、リリースでビルドする際には必ず必要なフラグの様で、DLCやパッチ向けの場合必ず無効にする必要がありそうです。)

次のBoxにリリースする新しい名前を入力。

(ここでは、わかりやすく「1.0」という名称を設定していますが任意の名称が使えるようです。)

後は、「コンテンツの圧縮」フラグを有効(任意)、

バージョン情報なしでパッケージを保存する」を有効(※Docを見る限り有効にすべき?詳細不明なので調査要かと)

すべてのコンテンツを単一ファイルに格納」を有効(任意だけど、これはすべきかと)

クッカービルドの設定はプロファイルの内容に合わせるべきかと。

(画像だとDevelopになっているけど・・・)

後は、パッケージ設定でDocにの通り、ローカル向けに作成辺りを選び、

デプロイもなしにすればOKと思います。

他のOptionの有効無効の可否は調査が必要ですが。

後は上部の戻るボタンを押しLauncher画面に戻れば設定完了です。

好みに合わせてわかりやすくプロファイル名を変更しておいた方がベターです。


③ビルドの実行

Launcher画面から先ほど設定したプロファイルを起動し実行します。

16_execute_compleate.jpg

正常に終了すれば上記画像の様になるはずです。

NG(赤文字)があればプロファイル設定ないし、環境・PJ側に問題があると思います。

再実行しないなら「Done」を押して戻ります。


④生成物の格納先について

③が正常に完了すれば、下記の場所にPakがリリース名のフォルダ配下に生成されます。

そのPakが今後のパッチやDLCを生成するためのベースファイルになります。

格納先:

PJDIR/Release/(リリース名)/(プラットフォーム名)/~~.pak

40_pjlunch_rel_build_execute_paksave.jpg

※上記は、リリース名が1.0でWindowsNoEditor向けプラットフォームの場合です。


DLCの作成手順(調査結果)

ベースとするリリースファイルが出来たので、次にDLCの作成について説明します。

最初に述べたように、プラグインにてアセットを管理します。

ここでは、参考Wikiに有るPJを使用したのでサンプルDLC「MyFirstMod」と5分で作った自作DLC「dlcc22」を作る場合の例について、ざっくりですが説明。


①前提条件:DLCとして作る内容について(イメージ)

今回の例で作るDLCコンテンツのイメージです。

参考WikiにもあるLevelをTopレベルから次のレベルに移動する物を作ります。

0_enableplugin.jpg

DLCはプラグインで管理しますので、上記の様に、コンテンツブラウザの表示で「プラグインコンテンツを表示」有効にします。

また、プラグイン形式で各プラグインにアセットが含まれている必要があります。

これについては空プラグインを作成し、Editor内でアセットを追加したり移行して、ファイルを用意すべきですが、この章では既にアセットがプラグイン内部に格納されている前提で説明します。

(面倒なのでこの章では省略。次の章でざっくり記載します。)

なので、下記の画像例のようにPJ内で既に以下のDLC用のプラグインが有効になっている必要があります。

3_usepluingview.jpg

後DLC用に使うプラグインはコンテンツが含まれるタイプなので、各プラグインにて以下の設定が有効である必要もありますので注意。

4_editPlugin_withContent.jpg


ベースレベル

よくあるFPSのテンプレです。

1_1_baseLevel.jpg


DLC1:MyFirstModで追加するレベル

これについては、手順を理解してもらいやすくするために、参考Wikiにて公開されているサンプルをそのまま利用させてもらいました。

このプラグインにのみ格納されているレベル「modexamplemap」を使用します。

(PJDir/Plugins/MyFirstMod フォルダでプラグインが格納されている必要があります)

1_2_myfristmodlevel.jpg


DLC2:dlcc22で追加するレベル

調査途中で適当に作成したお試しプラグイン・DLCです。なので名前が適当になってます。

DLC2専用のレベルは数分で作った適当レベル「VectorField」とします。

1_3_dlcc22level.jpg


修正内容

両DLCを使うためにオリジナルのレベルから任意のレベルを起動できるようなコマンドを予め設定しておきます。

Gを押せばDLC1のレベルが開かれ、Vを押せばDLC2のレベルが起動する感じです。お試しなのでこんなもんでしょう。

1_4_level_select.jpg

今回は、既にこのレベルBPの修正が先ほどのリリース1.0には組み込まれている前提にしています。

試しにEditor上部のデバッグ実行にてレベルをプレイすると、各キーを押すとEditor上では問題なくレベル遷移ができるはずです。

(出来ない場合は、PJないし設定に誤りがあり移行の作業も関連付けができないはずです)


②DLC用プロファイルの設定

まず、DLC1「MyDirstMod」のサンプルDLCをリリースのするプロファイル設定例について説明します。

主な内容は参考Wikiの通りなので、それをそのまま冗長解説しているだけですので。

まず、ビルド設定はリリースと同じなので省略。

10_DLC_MyFirstMod_Cock.jpg

クック設定はリリースと異なるので注意。

上記画像の通り、DLCのベースとする「リリース名」、「DLCをビルド」、「ビルドするDLCのの名前」の項目が重要です。

一つ目の「リリース名」は先のリリース似て実施した1.0を今回の例では記入します。

ここはPJに合わせて調整すべきところです。

ただし、注意点として必ず存在するリリース名を記入する事になります

ここを誤るとビルドエラーになりますので注意。

後注意すべき箇所は、「ビルドするDLCのの名前」です。

ここにではリリースするDLCの名称となるので、上記例では「MyFirstMod」になります。

なおこの名称は、DLC用のアセットが存在しかつそのDLC用プラグイン自体がPJ内で有効になっている事が必要です。

リリース名には、存在しないプラグイン(DLC)名も設定でき、ビルドも正常に完了してしまいますが、PakにはDLC用のアセットが何一つ含まれない感じです。

あと、プラグインが有効であることと記載しましたが、そこも有効でないとPJがアセット認識しないはずなので取り込ませません(※ただもう少し調査はいるかも)。

あとはリリースと同じでおKです。

リリースと同じく実行し正常に終了すればDLCのパッケージ作成完了です。


③DLC用パッケージのありか

先のビルドで生成されたファイルは以下のフォルダ/ファイル名にて格納されます。

(PJDir)/Plugins/(DLC:プラグイン名)/Saved/StagedBuilds/(プラットフォーム名)/(PJ名)/Content/Paks/~~.pak

フォルダパス
内部例
備考欄

(PJDir)/Plugins/(DLC:プラグイン名)
20_exploer_plugin_myfrist.jpg
ビルド後であればSavedフォルダが作られる

(DLC:プラグイン名)/Content
20_exploer_plugin_myfrist_contexts.jpg
DLC用アセット格納先

(DLC:プラグイン名)/Saved
20_exploer_plugin_myfrist_saved.jpg
StagedBuildsの深いDirにPakがあります

Saved/Cooked/(~以下略
21_exploer_plugin_myfrist_saved_cock.jpg
bin,json,txt以外のファイルがCookにて組み込まれたアセット。画像ならPluginsフォルダが追加contentで認識されたもの。

Saved/StagedBuilds/(プラットフォーム名)/(PJ名)/Content/Paks/~~.pak
22_exploer_plugin_myfrist_saved_stagebuild_pak.jpg
作成されたDLC用Pakの現物。これをリリースする

上記表の最後にあるPakがDLC用追加Pakになります。

これをリリースすればユーザが指定Release版数を満たせば使えるはずです。

実装元に追加contentを呼び出すことが必要ですが・・・。

ただし、表の画像の通りPakのファイル名が「(PJ名)-(プラットフォーム名).pak」になっており、

実のところオリジナルのPak名と重複しているので、DLC用にRenameする必要があります

ここでは、DLC名がMyFirstModなので適当に「DLC_MyFirstMod.pak」としておきます。

23_rename_pak_and_move_release_pak.jpg

上記画像の通り、リリース先のPakがあるフォルダにDLCのPakをコピーすれば完了です。

ファイルパスは、

「(パッケージビルドで生成したルートフォルダ)/(PJ名)/Content/Paks/」

フォルダにPakをコピー。

24_rename_pak_and_move_release_pak_with_subfolder.jpg

ちなみに、上記画像の通り、PaksフォルダないであればOKなので、例えば「DLC」というサブフォルダを作ってそこにまとめる事もできます

コピーした状態でパッケージビルドのExeを実行します。

26_execute_packgge_toplevel.jpg

実行した結果、上記画像の通りルートのレベルで起動します。

DLC追加前のパッケージビルドのExeを実行した場合、レベル遷移のキー「G」、「V」を押して無反応でしたが、

DLC追加後であれば、MyFirstModのレベルに遷移する「G」を押すと下記の画像みたくレベル遷移が正常に実施できるはずです。

27_execute_dlc_myfirst_level.jpg


④DLC2:dlcc22を追加作成する

現在の状態ではDLC1:MyFirstModのみ有効なので、DLC2用の「V」キーを押してもパッケージビルドの環境ではレベル遷移しません。

DLC2を追加作成します。が、やっていることは同じで、DLC1の内容を複製したプロファイルの項目にDLC名を「dlcc22」に変更しカスタムプロファイルからビルドするだけです。

ビルドが正常に完了すれば、先のDLCの例の用に「Plugins/(DLC-プラグイン名)/Saved/StagedBuilds/(プラットフォーム名)/(PJ名)/Content/Paks/~~.pak」を探します。

あとは同じく、Pak名が重複してしまうので適当な名前に変更(ここでは、「DLC_dlcc22.pak」としてます)する。

そして、下記の画像のようにパッケージビルドのPaksフォルダ内部にコピーするだけ。

31_add_dlcc22_pak.jpg

この状態で再度パッケージビルドからExeを起動し、DLC2用の遷移キー「V」を押すと、

下記の画像の用に専用のレベル遷移へ遷移できるようになるはずです。

なお、DLC1もPaksフォルダ配下に残していれば起動時のデフォルトレベルから当然、DLC1のレベル遷移へも問題なくできるはずです。

32_execute_dlcc22_level.jpg

ここまでDLCの大まかなビルドと導入手順になります。


DLC用のプラグインテンプレートの作成について(調査結果)

先の章で大まかなDLCのビルド手順に触れましたが、ざっくり一から作る場合について思いつく例を記載します。

ここでは、DLC3「BluemanDLC」という仮想のDLCを一からつくるケースを例とします。

まずは、PJのフォルダ直下に「Plugins/(プラグイン・DLC名)」のフォルダを作成します。

※実行例「(PJDir)/Plugins/BluemanDLC」のフォルダを作成。

次に、そのフォルダの中に、とりあえず空フォルダ「Content」を先に作成します。(もしかするとなくても行ける?)

そして、プラグインの設定ファイルを作成します。

ここではプラグイン(DLC)名を「BluemanDLC」とするので、「BluemanDLC.uplagin」というファイルを作成します。

※新規作成でも構いませんが、先のDLCでつかった他のDLC(プラグイン)の設定ファイルをコピペし名称変更でも、ひとまずOKです。

下記の画像の通りプラグインフォルダの配下に最低限必要な要素が揃いました。

60_howto_dlc_ex_bluemandlc_folder.jpg

次に、プラグインの設定ファイルをこのプラグイン(DLC)専用に作成・修正します。

以下の記述をコピーし、必要に応じて名称などを変更すれば今はOKです。

「(プラグイン・DLC名).uplugin」ファイルの中身になります。

例;BluemanDLCの場合。


BluemanDLC.uplagin

{

"FileVersion" : 3,
"FriendlyName" : "BluemanDLC",
"Version" : 1,
"VersionName" : "1.0",
"CreatedBy" : "",
"CreatedByURL" : "",
"EngineVersion" : "4.9.0",
"Description" : "Blueman sensei color dlc",
"Category" : "User Mod",
"EnabledByDefault" : true,

"Modules" :
[
],

"CanContainContent" : true
}


上記設定ファイルで設定すべき項目は以下。

なお、プラグインとして基本的に変更しては行けない領域や、必須項目もあるので注意。面倒なので今回は省略。

必須

・「"FileVersion" : 3,」・・・プラグインでの現在の固定値。ここだけはこのままの値(3)にすること。

・「"CanContainContent" : true」・・・Trueにしないとこのプラグイン内にあるcontent(アセット)が含まれていると認識されない。

Option

・「"Category" : "User Mod"」・・・ここでは下記の画像とあわせるために「User Mod」としているが、自由に変更可能。プラグインのカテゴリー設定。例:DLCなどにするとか。

・「"FriendlyName" : "BluemanDLC"」・・・プラグインの名称。無難にプラグインのフォルダ名と同じ方が管理がし易いかと。ここではブルーマン先生カラーのDLCという設定なので適当に「BluemanDLC」という名称に設定。

・「"Description" : "Blueman sensei dlc"」・・・プラグインの説明。下記の画像であれば、プラグイン名の下に書かれる説明事項。なくてもOKですが、管理上わかりやすい内容にすべきです。手抜き良くない。

他の項目についてはVersionなど変更すべきですが、必要に応じてということで省略。

ちなみに、一度ちゃんとしたプラグインをC++を用いて作ったことがあるUE4ユーザであれば、先の設定ファイルに疑問点を持つはずです。

「プラグインの種別「Runtime」などの指定がないけど・・いいの?」と。

私自身も完全に理解していませんが、DLCのような用途では不要な項目なのでは?と思っています。

実際、アセットだけのプラグインでRuntime指定を追加したところいつも通りにDLLの作成をしようとしてNGが発生します。

なので単にアセットだけでソースもなくかつ標準パッケージに含まれてはまずい場合だと不要なの?かもしれないです。(※要確認)

設定ファイルが正しい状態でPJをEditorから再起動し、問題が発生しなければ以下の画像の通り新しくプラグインの項目が増えるはずです。

あとは、Enabledになっていることを確認できればOKです。なってない場合は、有効にし再起動が必要です。

ちなみにEditから先のuplaginの内容を動的に変更できます。

Editorから設定ファイルを修正すると先のフォーマットとは異なりますが、まあ問題ないでしょう。

61_howto_dlc_ex_bluemandlc_reboot.jpg

有効になっていればcontentBrowserにて「BluemanDLC」というcontentフォルダが空状態で表示されます。

当然ですが、新規作成でなく事前に格納したいuassetのファイルを先にプラグインフォルダ配下のContentフォルダの中に、ファイルコピーし現物を格納すれば自動的読み込むこともできます。

画像の通りこのパス配下にアセットを追加すれば、DLC用のアセットとして管理することができます。

此処から先は通常通り作成し、最後にDLCようのカスタムプロファイルからDCL名に合わせて「BluemanDLC」で指定してビルドすればOKです。

62_howto_dlc_ex_bluemandlc_blank_cont.jpg


パッチの作成手順(調査結果)

リリース、DLCに続いてパッチの作成手順です。

といってもBatファイルとかが作成されるのではなく、単に差分のPakが作られる感じです(※多分ですが・・・)。

今回は、本記事にて作成したリリース1.0をベースに追加パッチを作成する例で説明します。


①作成するパッチのイメージ

今回の事例で作成するパッチのイメージですが、下記の画像のような一部のアクターに設定されているマテリアルを新規追加した別マテリアルに差し替えることを目的とします。

とりあえず、リリース1.0環境から新しくcontentBrowserにPJ固有のフォルダ配下にマテリアルを作成します。

次に、レベル上のアクターを適当に選択し先の新規マテリアルに差し替える

変わったら保存します。必要に応じてプレイから動作確認する。

50_patch_10a_leveldesighn.jpg


②パッチ用のプロファイル作成

次に、projectLauncherを起動し、パッチ用の新規プロファイルを作成します。

ビルド設定についてはリリース、DLCと同じなので省略。

クック設定はパッチ専用の設定が必要です。

下記の画像の通り、DLCと同じくベースとなる「リリース名」、「パッチを生成」がパッチ専用の項目になります。

リリース名はDLCと同じくそのリリース名が必ず存在することが大前提です。

他の項目はすでに説明したので省略です。PJに合わせて必要に変更願います。

51_patch_10a_pjlunch_cock.jpg

設定が完了したら、カスタムプロファイルでビルドし正常に終了すればOKです。

もしNGが出る場合、ベースのリリースファイルが無いことが一番考えられます。


③パッチ用Pakをリリース向けにあてる

パッチ用のPakが生成されるファイルパスは以下になります。

(PJDir)/Saved/StagedBulds/(プラットフォーム名)/(PJ名)/Content/Paks/(PJ名)-(プラットフォーム名)_P.pak

これまで違う点は、Savedフォルダに生成されること。

また、作成されるPakのファイル名の末尾に「_P」がつくことです。

52_patch_10a_crate_pak_to_savedFolder.jpg

※上記画像のPJ名フォルダを更に潜るとPakが存在します。

53_patch_10a_crate_pak_to_content.jpg

生成されたパッチのPakを下記の画像の通り、

パッケージビルドで作成したベースのリリース名が存在するパッケージビルドのPaksフォルダにコピーします。

※コピー先は先のDLCの事例と同じ場所です。

54_patch_10a_copy_to_release_pak_10.jpg

PakをコピーしたらDLCのの時と同様にExeを実行します。

するとルートのレベルがパッチ追加前と異なり、マテリアルが変わることが下記の画像の通り確認できるはずです。

55_patch_10a_execute_level_10a.jpg

これで追加パッチがリリース1.0に対しあたったことになります。

あと、パッチリリース用のインストーラーを各自で用意し、エンドユーザに実行してもらう形で配布すれば終わりかと思います。

さらに追加の追加パッチをリリースする場合は、どうすべきかについては正確なことがまだわかりません。

同じリリース名(ポイント)をベースにする場合なら、パッチをさらに上書きするだけいいかもしれませんが、

私自身そこは未確認事項なので正式な手順はわかりません。


非常識な長文で申し訳ありませんでしたが、これにて以上です。

公式Docにて日本語訳資料が出ればこの記事は不要ですが、それまでの間のお試しの参考資料として使っていただければ幸いです。