【Unity】RPGを作るチュートリアルその125 WebGLのビルドとApacheの構成

【Unity】RPGを作るチュートリアルその125 WebGLのビルドとApacheの構成

シンプルなRPGをUnityで作るチュートリアルシリーズの125回目です。

第124回ではWebGLの検証のため、DockerとApacheを使ってWebサーバを準備して、ローカルの検証環境を作成しました。

今回はWebGLのビルドとApacheの構成を行います。

 

 

制作環境

MacBook Pro 2023 Apple M2 Max

Unity6 (6000.0.30f1) Silicon

 

作業内容と順序

シンプルなRPGを作る上でどんな作業が必要か、どんな順番で作っていくと良さそうか、別ページで検討しました。基本的にこの流れに沿って進めていきます。

 

チュートリアルの一覧

このシリーズ全体の一覧は以下のページにまとめています。

 

前回の内容

前回はWebGLの検証のため、DockerとApacheを使ってWebサーバを準備して、ローカルの検証環境を作成しました。

 

WebGLのビルド

WebGLのビルドを確認できる検証環境を作成できたので、UnityからWebGL用にビルドしていきましょう。リリースを想定して圧縮設定なども入れていきたいと思います。

圧縮設定によってはWebサーバ側で設定ファイルに書かないといけないものもあるので、そちらも対応していきます。

 

WebGLのモジュールを追加

今使っているUnityのバージョンにてWebGLのビルドモジュールをインストールしていない場合は、このタイミングでしておきたいと思います。画面上部のメニューバーから [File] -> [Build Profiles] を選択して、「Build Profiles」の画面から「Web」を選択することでインストール用のボタンが表示されるので、[Install with Unity Hub] をクリックします。Unity Hubから直接インストールしてもOKです。

モジュールがない場合
モジュールがない場合

 

プラットフォームの切り替え

WebGLのモジュールをインストールしてUnityのエディタを再起動すると、左側のプラットフォーム一覧でWebGLが白文字で表示され、選択すると [Switch Platform] のボタンが押せるようになるのでこちらをクリックします。多少時間がかかるのでゆっくり待ちましょう。

プラットフォームの切り替え
プラットフォームの切り替え

 

ビルドの圧縮設定

ビルドを行う前に、Build Profileのウィンドウ上部にある [Player Settings] のボタンをクリックして「Player Settings」を表示します。このウィンドウでは、「Resolution and Presentation」の項目内で「Default Canvas Width」の値を [960] に、「Default Canvas Height」の値を [540] に設定します。

解像度の設定
解像度の設定

 

また、「Publishing Settings」にある「Compression Format」の値を [Gzip] に変更します。

圧縮設定
圧縮設定

 

Gzipは全てのブラウザが対応しているのでこちらを選択しました。Brotliは圧縮率が高いのですが、サポートされていないブラウザがあるので、ユーザ側の環境を指定できない時にはGzipが無難かもしれません。

詳細については、マニュアルもご参照ください。

 

WebGL向けビルド

他のPlayer Settingsについては一旦置いておいて、ビルドを進めていきたいと思います。Build Profilesのウィンドウに戻って、「Platform Settings」にある「Development Build」のチェックを [false] に、「Code Optimization」を [Shorter Build Time] にして、ビルドを行います。本番用ビルドを行う時には「Code Optimization」を「Runtime Speed」に変更すると良いかと思います。

「Build」のプルダウンから「Clean Build…」を選択し、任意のパスにビルドしましょう。私の環境ではmac向けビルドより長い時間がかかっていたので、気長に待つと良さそうです。貴重な休憩タイムです。「Shorter Build Time」では約4分、「Runtime Speed」では約27分でした。

ビルドしよう
ビルドしよう

 

ビルドしたファイルの配置

WebGL向けにプレイヤーをビルドしたら、Dockerで作成したWebサーバのコンテナに配置しましょう。

まずは配置先のフォルダがどこにあるのか確認しておきます。Docker Desktopから前回作成したコンテナを起動した後、三点アイコンからメニューを表示して [View files] を選択し、ファイルツリーを確認します。

ファイルの確認
ファイルの確認

 

Apacheの設定ファイルを確認して、ドキュメントルートがどこになっているかを把握します。ドキュメントルートはWebサーバが外部に公開するディレクトリの起点で、このディレクトリ以下にファイルを配置することでブラウザから表示できるようになります。

設定ファイルの場所は「/usr/local/apache2/conf」のディレクトリです。ここにある「httpd.conf」を右クリックして、「Edit File」からファイルの編集ウィンドウを表示します。

ファイルの編集ウィンドウを開く
ファイルの編集ウィンドウを開く

 

編集ウィンドウではcommand+F(WindowsはCtrl+F)で検索バーを開き、「DocumentRoot」と検索します。公式イメージだと「/usr/local/apache2/htdocs」がドキュメントルートになっているようです。

ドキュメントルートの確認
ドキュメントルートの確認

 

ドキュメントルートに書かれているパスをファイルツリーで見てみると、「index.html」が配置されています。中身は前回確認した「It works!」となっているので、このディレクトリ(フォルダ)にファイルを配置すればよさそうです。

ドキュメントルートのディレクトリ
ドキュメントルートのディレクトリ

 

ファイルの配置はターミナルでcpコマンドを使うなど色々な方法がありますが、今回はこのままGUIで進めていきます。「htdocs」のディレクトリを選択して右クリックし、[Import] を選択します。

ファイルのインポート
ファイルのインポート

 

ファイルの選択ダイアログが表示されるので、Unityから書き出したWebGLのフォルダを選択しましょう。私は「SimpleRpg」という名前で書き出したので、このディレクトリ(フォルダ)を選択しました。

インポートするディレクトリの選択
インポートするディレクトリの選択

 

選択したディレクトリが「htdocs」の下にインポートされました。

インポートされた
インポートされた

 

WebGLのプレイヤー自体は現時点では動作しませんが、ブラウザからアクセスできることを確認しておきましょう。任意のブラウザを使って、「http://localhost:8080/SimpleRpg/」にアクセスします。「8080」の部分はコンテナ作成時に指定したポート番号、「SimpleRpg」の部分はUnityから書き出したフォルダの名前にしましょう。

以下のように表示されればOKです。赤く目立つエラー表示については、この後の設定ファイルの編集で消えます。

アクセスできた
アクセスできた

 

Apacheの設定ファイルを変更

上のエラーメッセージを見ると、Unity側ではGzipを使って圧縮していますが、Webサーバ側でこの圧縮形式を使うようになっていないため、解凍できずにいます。そのため、Apacheの設定ファイルを変更していきます。

設定ファイルは先ほどドキュメントルートの確認に使用した「/usr/local/apache2/conf」のディレクトリにある「httpd.conf」です。Unityのマニュアルには、Apacheを使用する場合にどんな記載を行うべきかが書かれているので、こちらを参考に記載していきます。

 

今回はローカルの検証環境で「httpd.conf」を編集できるため、「httpd.conf」用のサンプルを参考に以下のように追記しました。設定ファイルの中身を確認した時と同様に、右クリックのメニューから「Edit file」を選択し、ファイル編集ウィンドウを表示して追記します。

サーバをレンタルする場合など、権限の問題で「httpd.conf」を変更できないことがあるので、その場合は「.htaccess」のファイルを変更します。

「httpd.conf」の末尾に上記の内容を追記します。<Directory>で指定しているパスは、WebGLのビルドを配置した場所に書き換えてください。「# Insert additional code here」の項目では、Unityのマニュアルに記載されているパフォーマンス向上の項目を追加しています。

ファイルを保存したら、画面右上にあるリスタートボタン(くるくるアイコン)をクリックしてコンテナを再起動します。実環境だとマシンは止めずApacheのデーモンを再起動するだけでいいのですが、今回は検証環境なのでお手軽にいきます。

コンテナを再起動
コンテナを再起動

 

コンテナの再起動後はブラウザからWebGLのビルドを配置したURL(私の環境だとhttp://localhost:8080/SimpleRpg/)にアクセスします。キャッシュが残っている可能性があるので、削除してからアクセスしましょう。私はキャッシュを消せていないことに気付かず何度もchromeでスーパーリロードして「設定は合っているはずなのに……」と悩みました(1敗)

Apache側の設定の問題か、キャッシュの問題か、切り分ける際にはシークレットモードでキャッシュを確認しない形でアクセスして動くかどうかをチェックしてみましょう。

やっと動いた!
やっと動いた!

 

ひとまずブラウザ上で動くようになったので、動作を確認していきましょう。一通り動くようにはなっていましたが、いくつか気になる点もありました。

  • メニュー画面で魔法を使った時の効果音がない
  • メニュー画面で最後の1つのアイテムを使うとエラーで止まる
  • ブラウザをリロードするとセーブが消える

これらについては次回以降に対応していきます。特にセーブが消える方は影響がでかいですね(白目)

 

今回のブランチ

今回はゲームのプロジェクト内の変更はありません。

 

まとめ

今回はWebGLのビルドとApacheの構成を行いました。ApacheやNginXなどの主要なWebサーバに関してはUnityのマニュアルに設定内容が書かれているのでありがたいですね。

次回はWebGLでセーブが保存されない点など、確認できたバグを修正します。

 

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!