Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 モバイルDLC&パッチ処理について

この記事は裏Unreal Engine 4 (UE4) Advent Calendar 2016への参加4日目の記事です。

qiita.com

裏っぽいネタを考えましたが、正直前回の内容の方がよっぽど裏っぽいと今更ながら気づきましたが、訂正はしません。

さて、今回はUE4.14で追加された『Mobile Patch Utilities Blueprint library』を使って、パッケージングからパッチ処理まで一通り解説します。

公式には現在UE4.14のリリースノートにある以下の画像の情報しかありません。

f:id:alwei:20161201193445p:plain

ここからわかる範囲で色々追っておきたいと思います。使用バージョンは当然UE4.14.0になります。

事前に準備しておくもの

まず事前に用意しておくものとして、ダウンロードコンテンツをダウンロードさせるためのサーバーが必要です。これはどのようなものを使っても問題ありません。

HTTPを使って通信可能な自宅サーバーであればそこからでもOKですし、無料で使えるDropboxにあるPublicフォルダー上にダウンロードコンテンツを配置していくのでも問題ありません。

今回はDropboxのPublicフォルダーに配置して使います。ただし2016年12月4日現在DropboxのPublicフォルダーは新規登録された場合では利用ができませんので、無料でやりたいという場合は他のクラウドサーバーや自宅サーバーを構築してからここから先を試してください。

サーバーが用意できた場合には次へいきます。

プロジェクトの作成

DLCを含むプロジェクトを作成します。ここで重要なのはC++プロジェクトで作成することです。自分がブループリントオンリープロジェクトを試した範囲では、DLCパッケージング時に必ず失敗してしまいました。

これはどうやらC++プロジェクトでビルドしないと解決しない問題のようなので、C++プロジェクトで始めるか、C++を使わなくても空のC++コードをプロジェクトに追加してください。これでC++プロジェクトとしてビルド可能になります。

f:id:alwei:20161201201814p:plain

パッケージング作業

既にコンテンツを制作しており、DLCも含めてプロジェクトに追加しておきます。

ここで注意しなくてはならないのが、DLCとなるコンテンツをひとつのレベル(.umap)ファイルに含めておくことです。DLCのパッケージング基準はレベルのファイルに含まれているかで決まります。DLCとしたいコンテンツは1つのレベルの中に含めてしまいましょう。

f:id:alwei:20161201202233p:plain

これでDLCをパッケージングする準備が整いました。次にプロジェクトランチャーというものを開きます。プロジェクトランチャーはプロジェクト内で一定の自動化処理などを行うことが可能になります。

f:id:alwei:20161201202719p:plain

UE4ではパッケージングに対しても、標準で用意されているもの以上に処理を加えたい場合にこのプロジェクトランチャーを利用します。

f:id:alwei:20161201203038p:plain

プロジェクトランチャー上の上記画像の場所からAndroidであれば、"Minimal Android APK + DLC"を選択し、iOSであれば"Minimal iOS App + DLC"を選択します。今回はAndroidを利用してパッケージングしていきます。

f:id:alwei:20161201203328p:plain

パッケージングファイルとDLCファイルの保存場所を指定しておきます。

f:id:alwei:20161201203527p:plain

次にゲームを起動するために必要なファイルが含まれているレベル(.umap)を指定します。ここではDLCを含んだレベルのマップは指定しないようにしておきます。

f:id:alwei:20161201204018p:plain

Androidの場合にはDLCに含むテクスチャーフォーマットを選択します。とりあえず全てのAndroidで対応しているETC1を選択しておくのが無難です。あとはDLCを含んでいるレベルを選択して、プロファイルを作成します。

f:id:alwei:20161201204348p:plain

カスタムプロファイルができあがるので、このままパッケージング作業を行います。

f:id:alwei:20161201204643p:plain

あとはパッケージング作業が終わるまで待機します。ここで失敗した場合にはログを見ながらパッケージング処理を成功するまで何度もトライ&エラーしていきます。

f:id:alwei:20161201205253p:plain

ここまでを完了すると、最初に指定したフォルダーに"App"と"HTTPchunks"という2つのフォルダーができているはずです。

f:id:alwei:20161201205612p:plain

"App"の方は実際にゲームの起動に必要となるファイル一式が入っています。そのままスマートフォンにインストール可能なバッチファイルなどが含まれているので、スマホにインストールしてください。

あとはDLCが入っている"HTTPchnks"に関しては次に解説します。

DLCをサーバーに配置しダウンロード&インストール

先程作成した"HTTPchnks"をHTTPサーバー上に配置します。Dropboxの場合には、"HTTPchnks"フォルダーごと、Publicフォルダーに入れてしまいます。これで誰でもダウンロード可能な状態となります。

実際にスマホからサーバーにアクセスし、ダウンロードを行ってからDLCとなるレベルへとジャンプをするところです。今回はウィジェットのボタンからダウンロードするようにしています。では実際の流れをブループリントで確認していきます。

f:id:alwei:20161201211506p:plain

まずは4.14で追加されたモバイルパッチ用の"Request Content"ノードを使います。"Remote Manifest URL"や"Cloud URL"と"Install Directory"をしっかりと指定しておきます。

今回は全てDropbox上の公開リンクから取得したものを指定しています。ここを間違えると、"On Failed"イベントが発生し、Error Textを取得してエラーハンドリング可能です。成功した場合には"On Succeeded"イベントが発生し、続きを実行可能です。

f:id:alwei:20161201212739p:plain

ダウンロードの際には、"Has Active WiFi Connection"ノードでWiFiの有無の確認、"Get Supported Platform Names"ノードで端末のAndroidでどのテクスチャーフォーマットが対応しているかの確認、"Get Active Device Profile Name"ノードで対応しているデバイスプロファイル名の取得、"Get Installed Content"ノードで既にディレクトリー上にDLCが存在していないかのチェックを行うことが可能です。

f:id:alwei:20161201212216p:plain

Request Contentからの続きです。ダウンロードリクエストが成功し、ダウンロードが完了すると、"On Succeeded"イベントから"Mobile Pending Content"というリファレンスを取得できます。ここには非常に重要な情報が入っているので、一時的に変数に保存しています。

"Mobile Pending Content"には既にダウンロード済みのコンテンツ情報が含まれています。これを使って"Start Install"ノードを呼び出します。

f:id:alwei:20161201213703p:plain

"Start Install"が成功後に再度"On Succeeded"イベントが呼ばれます。失敗時は"On Failed"イベント呼ばれるので、エラーをチェックしてハンドリングします。

成功後には"Mount"ノードを"Mobile Pending Content"経由で呼び出します。端末上でのマウントが成功するとインストールが完了するので、ついにゲーム上で利用可能となります。

ちなみに"Mobile Pending Content"にはインストールの際に非常に便利なユーティリティノードがかなり含まれています。

f:id:alwei:20161201214152p:plain

端末上のディスクサイズ、ダウンロードコンテンツサイズ、インストールコンテンツサイズ、実際のインストールに必要なディスクサイズなどを取得可能です。

f:id:alwei:20161201214619p:plain

更に現在のダウンロードスピード、ダウンロード状況、インストール進捗率、トータルダウンロードサイズなど、逐次ユーザーに与えるべき情報を取得することができるので、上手く活用できればユーザーに与える不安が少なくなります。

これだけ情報があればDLCを作る上で困ることはほとんどないかと思います。

実はモバイル以外も…

さて、ここまでモバイDLCの使い方を解説してきましたが、かなりお手軽に使えることがわかったんじゃないかと思います。

というかモバイDLCといいながら、実はこれPCでも普通に使えます。

別に特殊なことはしてなくて、Win64向けにパッケージングして、あとはモバイルと同じように実行したら普通にインストールできました。PC上でも気軽にDLCを行うことができます!!

いや~、本当に素晴しいですね。DLCとパッチ処理がこんなにも簡単にできてしまうなんて。

GitHub上でプロジェクトを公開

折角なので、今回作成したプロジェクトをGitHub上に公開しておきます。なにかしらの参考になればなと。

github.com

ぜひプロジェクトを参考に、DLCを作成してみてください。


明日はConquestArrowさんによる、『Unreal.js を使ったエディタ拡張について』についてです。Unreal.jsは最近非常に興味があるので楽しみです。