UnityでWebGLビルドしたビルドファイルをアップロードせずローカルサーバーで起動する(Unity 初心者)

 はじめに

Unityでゲームを作る際、色々なビルド先があると思いますが、その中で私がよく使っているのがWebGLのビルド。簡単に作成したゲームを展開できますし、unityroomなどのゲームをアップロードするサイトなどに自作ゲームをアップロードするだけで多くの方に手軽にブラウザ上で遊んでいただけます。

さて、このWebGLビルド、手軽なのですが私のような回線弱者はサイトにアップロードする際、すごく時間がかかり、その間、他のネットを使う作業ができなくなります。

私が作業できなくなるのは別に構わないのですが、家族がいるので家族もネットを使うことがアップロードしている間ほとんどできなくなります。

なので夜中など家族が使わない時にアップロードしているのですが、これだと仮にアップロードしてから問題が発生した際に、またアップロードする時に夜中を待たなければいけません。

これはめんどくさいので、サイトにアップロードしなくても(ネット回線を使わなくても)WebGLでビルドしたゲームを試せるようにできないか?と思いました。



Unityでビルドする時にできるじゃん。

はい、できます。ビルドする時に「ビルドしてプレイ」みたいなビルドをするとビルドが成功した後にブラウザが立ち上がり、ゲームが実行されます。

しかし、この方法はあくまでもビルドした時に使用できるだけで、すでにあるビルドファイルをビルドはできません。(できたらすいません。)

前のビルドはどうだったっけな?みたいな時にビルドファイルごとに試せるようにした方が私自身は良かったです。



本題

ということでChat GPTさんに聞いたところ、一番簡単そうなのは「Pytonでローカルサーバーをたてる」でした。

追記:Node.jsとnpmでも同様にローカルサーバーをたてれます。こっちの方が後述するサーバーをカスタムする必要がなさそうなのでこっちの方がいいかもしれません。私はNode.jsは利用したことがないので、Pythonでやってみました。

①Pythonをパソコンにインストール

私はPythonを利用したことがあったので、すでにインストールされていましたが、Pythonを利用したことがない人はインストール方法調べてください。

②ローカルサーバーをたてる

Pythonを導入できたら、ローカルサーバーを立てます。以下のようにコンソールに入力します。


//ビルドフォルダーにカレントディレクトリを移動
cd /path/to/MyGameBuild

//ローカルサーバーをたてる(Python3)
python -m http.server

③たてたローカルサーバーにアクセス

なんでもいいので、ブラウザを開いて、「http://localhost8000」をURLに入力して移動したください。すると自分のビルドしたゲームが起動されるはず?

※問題発生

ゲームが起動されない。。。 以下のようなエラーがでました。

Build/"ビルドファイル名".framework.js.gz! This can happen if build compression was enabled but web server hosting the content was misconfigured to not serve the file with HTTP Response Header "Content-Encoding: gzip" present. Check browser Console and Devtools Network tab to debug.

どうやら圧縮ファイルを適切に展開できてないみたいです。

ということをChatGPTさんに聞いてみました。

④ローカルサーバーをカスタムする

ということで、ChatGPTさんが作ってくれた。


# custom_server.py

import http.server
import socketserver
import gzip
import os
from http import HTTPStatus

class GzipHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
    def end_headers(self):
        if self.path.endswith('.gz'):
            self.send_header('Content-Encoding', 'gzip')
        super().end_headers()

    def guess_type(self, path):
        mime = super().guess_type(path)
        if path.endswith('.gz'):
            mime = 'application/javascript'
        return mime

PORT = 8000
Handler = GzipHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()


このファイルをビルドしたフォルダーに入れて、ターミナルに以下のコマンドを入れる。


python custom_server.py

⑤ローカルサーバーにアクセス

無事、Unityのビルドファイルを実行することができました。



まとめ

これでいつでも回線を気にすることなく、WebGLビルドしたファイルをブラウザで確認することができました。

 

コメント