この記事は裏Unreal Engine 4 (UE4) Advent Calendar 2016への参加4日目の記事です。
裏っぽいネタを考えましたが、正直前回の内容の方がよっぽど裏っぽいと今更ながら気づきましたが、訂正はしません。
さて、今回はUE4.14で追加された『Mobile Patch Utilities Blueprint library』を使って、パッケージングからパッチ処理まで一通り解説します。
公式には現在UE4.14のリリースノートにある以下の画像の情報しかありません。
ここからわかる範囲で色々追っておきたいと思います。使用バージョンは当然UE4.14.0になります。
事前に準備しておくもの
まず事前に用意しておくものとして、ダウンロードコンテンツをダウンロードさせるためのサーバーが必要です。これはどのようなものを使っても問題ありません。
HTTPを使って通信可能な自宅サーバーであればそこからでもOKですし、無料で使えるDropboxにあるPublicフォルダー上にダウンロードコンテンツを配置していくのでも問題ありません。
今回はDropboxのPublicフォルダーに配置して使います。ただし2016年12月4日現在、DropboxのPublicフォルダーは新規登録された場合では利用ができませんので、無料でやりたいという場合は他のクラウドサーバーや自宅サーバーを構築してからここから先を試してください。
サーバーが用意できた場合には次へいきます。
プロジェクトの作成
DLCを含むプロジェクトを作成します。ここで重要なのはC++プロジェクトで作成することです。自分がブループリントオンリープロジェクトを試した範囲では、DLCパッケージング時に必ず失敗してしまいました。
これはどうやらC++プロジェクトでビルドしないと解決しない問題のようなので、C++プロジェクトで始めるか、C++を使わなくても空のC++コードをプロジェクトに追加してください。これでC++プロジェクトとしてビルド可能になります。
パッケージング作業
既にコンテンツを制作しており、DLCも含めてプロジェクトに追加しておきます。
ここで注意しなくてはならないのが、DLCとなるコンテンツをひとつのレベル(.umap)ファイルに含めておくことです。DLCのパッケージング基準はレベルのファイルに含まれているかで決まります。DLCとしたいコンテンツは1つのレベルの中に含めてしまいましょう。
これでDLCをパッケージングする準備が整いました。次にプロジェクトランチャーというものを開きます。プロジェクトランチャーはプロジェクト内で一定の自動化処理などを行うことが可能になります。
UE4ではパッケージングに対しても、標準で用意されているもの以上に処理を加えたい場合にこのプロジェクトランチャーを利用します。
プロジェクトランチャー上の上記画像の場所からAndroidであれば、"Minimal Android APK + DLC"を選択し、iOSであれば"Minimal iOS App + DLC"を選択します。今回はAndroidを利用してパッケージングしていきます。
パッケージングファイルとDLCファイルの保存場所を指定しておきます。
次にゲームを起動するために必要なファイルが含まれているレベル(.umap)を指定します。ここではDLCを含んだレベルのマップは指定しないようにしておきます。
Androidの場合にはDLCに含むテクスチャーフォーマットを選択します。とりあえず全てのAndroidで対応しているETC1を選択しておくのが無難です。あとはDLCを含んでいるレベルを選択して、プロファイルを作成します。
カスタムプロファイルができあがるので、このままパッケージング作業を行います。
あとはパッケージング作業が終わるまで待機します。ここで失敗した場合にはログを見ながらパッケージング処理を成功するまで何度もトライ&エラーしていきます。
ここまでを完了すると、最初に指定したフォルダーに"App"と"HTTPchunks"という2つのフォルダーができているはずです。
"App"の方は実際にゲームの起動に必要となるファイル一式が入っています。そのままスマートフォンにインストール可能なバッチファイルなどが含まれているので、スマホにインストールしてください。
あとはDLCが入っている"HTTPchnks"に関しては次に解説します。
DLCをサーバーに配置しダウンロード&インストール
先程作成した"HTTPchnks"をHTTPサーバー上に配置します。Dropboxの場合には、"HTTPchnks"フォルダーごと、Publicフォルダーに入れてしまいます。これで誰でもダウンロード可能な状態となります。
UE4でモバイルDLC&パッチ処理ができた。ダウンロード、インストール、マウントまでわずか5ノードで完結。パッケージングも超カンタンだった。パッケージングからの手順を今度の裏アドカレで書きます。#UE4Study pic.twitter.com/ZdkYZPVp4X
— alwei@C91 西は22b (@aizen76) 2016年11月21日
実際にスマホからサーバーにアクセスし、ダウンロードを行ってからDLCとなるレベルへとジャンプをするところです。今回はウィジェットのボタンからダウンロードするようにしています。では実際の流れをブループリントで確認していきます。
まずは4.14で追加されたモバイルパッチ用の"Request Content"ノードを使います。"Remote Manifest URL"や"Cloud URL"と"Install Directory"をしっかりと指定しておきます。
今回は全てDropbox上の公開リンクから取得したものを指定しています。ここを間違えると、"On Failed"イベントが発生し、Error Textを取得してエラーハンドリング可能です。成功した場合には"On Succeeded"イベントが発生し、続きを実行可能です。
ダウンロードの際には、"Has Active WiFi Connection"ノードでWiFiの有無の確認、"Get Supported Platform Names"ノードで端末のAndroidでどのテクスチャーフォーマットが対応しているかの確認、"Get Active Device Profile Name"ノードで対応しているデバイスプロファイル名の取得、"Get Installed Content"ノードで既にディレクトリー上にDLCが存在していないかのチェックを行うことが可能です。
Request Contentからの続きです。ダウンロードリクエストが成功し、ダウンロードが完了すると、"On Succeeded"イベントから"Mobile Pending Content"というリファレンスを取得できます。ここには非常に重要な情報が入っているので、一時的に変数に保存しています。
"Mobile Pending Content"には既にダウンロード済みのコンテンツ情報が含まれています。これを使って"Start Install"ノードを呼び出します。
"Start Install"が成功後に再度"On Succeeded"イベントが呼ばれます。失敗時は"On Failed"イベント呼ばれるので、エラーをチェックしてハンドリングします。
成功後には"Mount"ノードを"Mobile Pending Content"経由で呼び出します。端末上でのマウントが成功するとインストールが完了するので、ついにゲーム上で利用可能となります。
ちなみに"Mobile Pending Content"にはインストールの際に非常に便利なユーティリティノードがかなり含まれています。
端末上のディスクサイズ、ダウンロードコンテンツサイズ、インストールコンテンツサイズ、実際のインストールに必要なディスクサイズなどを取得可能です。
更に現在のダウンロードスピード、ダウンロード状況、インストール進捗率、トータルダウンロードサイズなど、逐次ユーザーに与えるべき情報を取得することができるので、上手く活用できればユーザーに与える不安が少なくなります。
これだけ情報があればDLCを作る上で困ることはほとんどないかと思います。
実はモバイル以外も…
さて、ここまでモバイルDLCの使い方を解説してきましたが、かなりお手軽に使えることがわかったんじゃないかと思います。
というかモバイルDLCといいながら、実はこれPCでも普通に使えます。
思ったとおり、PC上でも普通にDLCのダウンロード、インストールまで一通り実行できた。DLCカンタン!!#UE4Study pic.twitter.com/gCj4AOfBR0
— alwei@C91 西は22b (@aizen76) 2016年11月21日
PCだと普通にパッケージングしたフォルダーの中にPersistentDownloadDirというのができて、そこにパッケージングファイルがダウンロード&インストールされる。#UE4Study pic.twitter.com/qD8AveGWkG
— alwei@C91 西は22b (@aizen76) 2016年11月21日
別に特殊なことはしてなくて、Win64向けにパッケージングして、あとはモバイルと同じように実行したら普通にインストールできました。PC上でも気軽にDLCを行うことができます!!
いや~、本当に素晴しいですね。DLCとパッチ処理がこんなにも簡単にできてしまうなんて。