UE4のHTML5出力でTappyChickenを飛ばすまで


#【前提】
__・Unreal Engine 4.8.1使用を前提に記述しています__
__・うそを書くつもりはありませんが。経験に基づいて記述しているため、間違いが多分にある可能性があります。__
__・Windows環境前提です__
__・手順の使用は自己責任でどうぞ__
__・公式のHTML5導入手順を一読してください__
https://docs.unrealengine.com/latest/JPN/Platforms/HTML5/GettingStarted/index.html
__・Emscriptenのバージョンは2015年07月11日現在最新は1.34.1ですが。最新版を使用するとHTML5化に不具合があるようですのでEmscriptenSDK はSDK 1.29.0を使用します__


#【目的】
UE4.8のHTML5出力機能を使って、UE4のサンプルであるTappyChickenを飛ばす。

#【公式ドキュメント】
上記の前提にある、公式ドキュメントですが。
私が読んでいて、よくわからない部分がありました。

もしかしたら、同じところで引っかかる方もいらっしゃるかもしれないので、以下に簡単に説明します。

＞ソースコード
＞Empscripten は HTML5 プラットフォームと使用するためにエンジンをコンパイルするので、エンジン ソースコードが存在しなくてはなりません。

UE4.7から製品版のエンジンにソースコードが添付されているので、ここの項は必要ありません。
ソースコードをGitHUBからダウンロードする必要はなくなりました。


__Emscripten のインストール__

SDKのダンロードするため以下のURLを開きます
http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html#


画面の下の方にある古いSDKリンクをクリックします。
SDK 1.29.0を推奨します。

emsdk-1.29.0-full-64bit.exeをダウンロードします。
![222.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/f91b92fc-c2c2-51c6-ca3f-c190f6583060.jpeg)



インストーラをダウンロードしたら実行します。
![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/8df0cb61-725e-6a63-78c7-26412d43ecce.jpeg)
次へのボタンをクリックします。

![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/90f55c0c-2df0-d2dc-e1bd-b18c712fa694.jpeg)
インストールするフォルダをCドライブから変更などする場合は矢印部分を変更します。
変更しない場合はそのままで問題ありません。インストールボタンをクリックします。

![6.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/58dfda4e-49f0-62b0-ff4b-5f225b56fa14.jpeg)
インストールが始まります。

![7.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/308633db-afc3-c409-fd51-2ab3bb81884d.jpeg)

以下の画面が出力されればインストール完了です。
![8.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/f593c852-511a-6999-5283-6b121fd35312.jpeg)
クローズボタンをクリックします。


__Emscripten のチェック__

Windowsのスタートボタン、すべてのプログラムから__Emscripten__フォルダを探します。
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/23a46a71-92ba-0151-e65e-08417ee3535e.jpeg)
↑赤枠の__Emscripten Command Prompt__を開きます。

![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/2abb44b9-cd8a-5545-6948-6a4e6f3cee10.jpeg)

赤枠のファイルはこの先で使用しますので、場所を覚えておきます。

__emsdk activate latest__

![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/a7a11f3b-13b3-3283-9f6f-b36123134c2e.jpeg)

実行が完了したらコマンドプロンプトを閉じてください。

__環境変数__
環境変数を確認、設定するため、Windowsのコントロールパネルを開きます。
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/a269bab0-3133-ec51-ee2e-499c1b07e77c.jpeg)
システムをクリックしてください。

![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/31c2a53c-abb0-435f-d62c-a5fefac7c430.jpeg)
システムの詳細設定をクリックします。

![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/ba7d2e83-cf49-359f-0cc3-7ffe7467cb92.jpeg)
環境変数をクリックします。

![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/46692a5b-89ee-aee6-4f5d-07835d8fc70b.jpeg)
__EMSCRIPTEN__が設定されえていれば問題ありません。
デフォルトのCドライブインストールなら
__c:\Program Files\Emscripten\emscripten\1.29.0__になっています。

__.emscripten ファイル__
次に__.emscripten ファイル__を確認、設定します。

ファイルの存在するフォルダをHOMEのフォルダですが。
先ほどの__Emscripten Command Prompt__のところで画面の赤枠がそのファイルです。
デフォルトなら
![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/b8d1419f-e9ed-db5b-7fa8-1b0a4b17f364.jpeg)
ここにあります。
__C:\Users\sleepingdragon__ sleepingdragonの部分はあなたのWindowsのユーザ名（ログイン名）です。

さて、ここのフォルダにある__.emscripten__のファイルをテキストエディタで開きます。
Windowsに標準でインストールされているメモ帳で問題ありません。

EmscriptenをデフォルトのCドライブにインストールしている場合は以下の変数が正しく設定されていることを確認します、この例はバージョン1.29.0のものです。

LLVM_ROOT='c:/Program Files/Emscripten/clang/e1.29.0_64bit'
NODE_JS='c:/Program Files/Emscripten/node/0.10.17_64bit/node.exe'
PYTHON='c:/Program Files/Emscripten/python/2.7.5.3_64bit/python.exe'
EMSCRIPTEN_ROOT='c:/Program Files/Emscripten/emscripten/1.29.0'

以下の画像のように設定されていれば問題ありません。
![7.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/1066a95a-e7c7-0fbe-273d-f230daf1433b.jpeg)

__ブラウザのインストール__
HTML5の実行に必要なブラウザをインストールします。
公式のドキュメントには64bitブラウザが必要と書いてありますが、現在は必要ありません。

エンジンのコンフィグファイルに書かれているブラウザがあれば問題ありません。
エンジンのコンフィグのパスは
C:\Program Files\Epic Games\4.7\Engine\Config\HTML5
または
C:\Program Files\Unreal Engine\4.7\Engine\Config\HTML5
にある__HTML5Engine.ini__に記述されているブラウザがあれば良いです。

![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/e783b76e-3ffc-75e9-6320-0a6ccee3df37.jpeg)
赤枠部分です。

ブラウザのパスはこのファイルに記述されているとおりでないとうまくHTML5のビルドツールが起動しない場合があるので合わせます。
デフォルトのCドライブにインストールする場合はほぼ問題ありません。

私のお勧めは32bit版のFireFoxです。

以下のURLからインストーラをダウンロードして実行します。
https://www.mozilla.org/ja/firefox/new/

![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/2cb1323d-dfdc-c316-f09d-95f9be0f151e.jpeg)
インストールのフォルダはデフォルトでインストールします、トラブルが起きにくいです。
もし、どうしても変更したい場合は、上記のエンジンの設定ファイルのフォルダパスを変更します。

#【__HTML5化__】

UE4のランチャーやエディタが起動している場合は閉じてUE4の再起動から実施してください。
(windowsの再起動ではありません。念のため）

ランチャーを起動し、ランチャーからTappyChickenのプロジェクトを作成します。
![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/79a954d1-89e6-27f7-82e7-a37788352976.jpeg)
この先の「余談」で説明していますが、HTML5化するプロジェクトはプロジェクトファイルの置いてあるフォルダが重要になります、デフォルトと違う構成にするとHTML5化は成功しますが、ブラウザの実行で失敗することがあります。
(2015/03/08現在　UE4.7.2)

![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/f9cbe02b-80f3-461d-f234-d4d97c6bd5d1.jpeg)


問題の起きにくい、プロジェクトの格納フォルダの例として
デフォルトの
__C:\Users\sleepingdragon\Documents\Unreal Projects__
や

ドライブのみ変更したい場合の
__D:\Users\sleepingdragon\Documents\Unreal Projects__
などであれば問題なく動作しました。

問題の起きる例としては
__D:\Unreal Projects__
や
__D:\unrealengine__
などフォルダパスの体系の違うフォルダ構成にすると「余談」で記述している現象が起こることがあります。

基本は、デフォルトのフォルダ構成を推奨します。
__私はこれで大いにハマりました。__

#【UE4エディタ】

プロジェクトが作成できたら、UE4のエディタを開きます。
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/7c4479ee-c46d-49e2-f10e-8b603e1006f4.jpeg)

HTML5化するために、プロジェクトの設定を行います。
ファイル⇒プロジェクトのパッケージ化⇒パッケージング設定　を開きます。
![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/ee52f85e-0c91-cd34-05b9-3f87b7a13dba.jpeg)

まず、パッケージ化をdevelopmentからShippingに変更します。
![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/c1eac71a-3837-bcb5-0cce-e0eb273d8683.jpeg)

対応プラットフォームにHTML5を加えます。
![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/8683f6c1-5e70-41a2-2d76-b99e68090867.jpeg)

×をクリックして、設定を終了します。
![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/12ee9d04-7732-4107-3900-df0b5c07bf62.jpeg)

HTML5のパッケージを作ります。
ファイル⇒プロジェクトのパッケージ化⇒HTML5
![6.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/2b3283e9-e489-81cd-8a0d-360a88413b06.jpeg)

パッケージを作成するフォルダを選択する画面が開くのでパッケージを格納したいフォルダを指定します。
ここで、この画面ではなく、公式のHTML5化のドキュメントに飛ばされる場合は何か手順を間違っています、確認しなおしましょう。

![7.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/0152fc74-2923-ae0f-b638-0154bd92e17f.jpeg)

この例では__D:\html5__のフォルダを指定します。
![8.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/20b53db4-a0af-3fa7-11fd-b87408655401.jpeg)

OKをクリックすると

エディタ画面の右下にHTML5のプロジェクトをパッケージ化のメッセージが出ます。
![9.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/cc280411-eb61-3a76-df11-e7e01b2840f0.jpeg)

パッケージ化に成功すれば「パッケージ化に成功しました」のメッセージが出ます。
![10.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/b9fc1470-1e3a-63af-568b-940aac1d53cc.jpeg)

不幸にも失敗しまった場合は、どこかで手順を間違ったか、他の原因かを確認するため、出力ログを確認します。
ウィンドウ⇒デベロッパツール⇒出力ログ
![12.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/d1c3bb55-df70-5f0f-33be-476728db1f2b.jpeg)
なんらかのエラーメッセージが出力されていると思います。
![13.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/5a39afaf-929a-ff21-ce58-cc92cb4dbc4e.jpeg)

#【実行】
先ほど指定したフォルダに以下のファイルが作成されているので
赤枠の__TappyChicken-HTML5-Shipping.html__をブラウザのfirefoxで開きます。

![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/a177041d-a1c0-0bb7-8f51-3ac422aea06f.jpeg)

ファイルを開くと以下の様な画面になります。

![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/a76aa078-6624-8344-9ee2-a91dd5d935ae.jpeg)

このようなダイアログがでることがありますが__処理を続行__をクリックします。
![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/996cdecd-12c4-0ece-81ee-916ff6832244.jpeg)

無事に以下のように実行された方、おめでとうございます。
![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/38c4b25b-29a4-6c4b-380b-fdadf2376a15.jpeg)

なんらかのエラーでJavaスクリプトのエラーが出てしまった方は、Javaスクリプトのエラーメッセージを確認し、手順をもう一度確認するか、実行環境を見直してみましょう。

以上でTappyChickenを飛ばすことができました。
当然、マウスを使用してゲームもできます。

#【チューニング】
HTML5のWebGLはスマホ等と同様で、あまり重い処理は実行できません。
ですので、以下、簡単に私の試したチューニング方法を列記します。
ただし、完全に経験からの手法なので技術的にはウソが含まれる可能性は十分あります。

1.ターゲットハードウェアをモバイルに設定する
先ほどのファイル⇒プロジェクトのパッケージ化⇒パッケージング設定の画面で
![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/856a278b-24d2-533e-172f-c94807569295.jpeg)
ターゲットハードウェアを選択し、プロジェクト設定の最適化対象を「モバイル/タブレット」
に変更し画質の品質も「スケーラブルな3Dまたは2D」に変更します。

変更したら「今すぐ適用ボタン」をクリックします。
※ただし、この設定はせっかく作成した、プロジェクトをモバイル用に変えてしまうことになります。必ず実験用のクローン（コピー）プロジェクトで実施してください。

2.ライトを静的に
プロジェクトには沢山のライトが存在しますが。
ステーショナリーライトやムーバブルライトを使わず、スタティック（静的）なライトに変更します。
![6.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/ba6d8968-d535-797d-2891-9ddacf76745b.jpeg)

3.ブラウザのメモリを増やす
ブラウザで作成したパッケージを実行すると、エラーメッセージにout of memoryや配列が多すぎる的なメッセージが
出力されて実行が止まることがあります。そのようなときは実行するHTMLファイルのJavaスクリプトを修正してブラウザの使用メモリを増やしてあげます。
![html5.png](https://qiita-image-store.s3.amazonaws.com/0/59114/ec90d88b-258b-8623-3b87-c57860f75cc3.png)
赤枠の部分のメモリを増やします。ただし、この例は32bitブラウザを対象にしています。
32bitであるために増やせるメモリにも限界があります。

私は1の方法と3の方法を合わせてマチネのファイトシーンのサンプルをHTML5化することはできました。
![mati.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/c7dda065-7f3e-080c-b965-896c46c1f08a.jpeg)

#【余談】

一番多い、こんな画面や（なんで、プロジェクトファイルが必要なんだよ！）
![ha.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/df5c6758-7a40-2cf2-a585-63400f95d8bb.jpeg)

たまに、こんな画面がブラウザ上に表示される場合があります。
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/17dabd6e-4be3-558a-98a4-e3f9e4d93ebd.jpeg)


これは、UE4のHTML5化がまだ実験段階だからだと思われますが、以下の原因で起こります。
__UE4のプロジェクトファイルのフォルダがデフォルトに合っていない__
からです。

問題の起きにくい、プロジェクトの格納フォルダの例として
デフォルトの
__C:\Users\sleepingdragon\Documents\Unreal Projects__
や

ドライブのみ変更したい場合の
__D:\Users\sleepingdragon\Documents\Unreal Projects__
などであれば問題なく動作しました。

#【おわりに】
UE4のHTML5まだまだ実験段階です。
まだまだ、問題も多いです。

さらなる進化に期待したいところです。

最後まで読んでいただいてありがとうございました。