【Unity】アプリ内にWebサーバーを!ビルド後に素材を差し替える

ゲーム開発時に良い素材ができたら、できるだけ早く実機確認したいですよね。
しかし、素材組み込み、ビルド、実機確認を毎回行っていると時間がかかります。

実機ビルド後に、素材を変更できるようにするアプローチは幾つかありますが、
今回は4のUnityアプリ内にWebサーバー立てる方法を採用して、デモを作成してみました。

1. 素材をABにしてサーバーから配信する
2. 開発者の環境にローカルサーバーを立てる
3. 外部サーバーを利用する
4. Unityアプリ内にWebサーバーを立てる

4のアプローチだと外部サーバーを用意することなく、Unityアプリで完結できるのが利点です。

ソースコード

ざっくりと解説
WebServer.cs
TCPListenerを利用したWebServerです。
UpdatePerFrameで毎フレームリクエストがあるか確認して、
リクエストがあればレスポンスを返す処理を行います。
Content-Type は application/json のみしかサポートしていないので、
クライアントからPostするときにデータをJson化する必要があります。
(実装サボりました)

TextureReplaceTest.cs
ブラウザからPostされた画像データをTexture2Dに変換して表示する処理と、ブラウザに返すHTMLが定義してあります。

動作紹介
今回作成したデモアプリをiOSビルドしました。
Unityちゃんの背景画像をブラウザから変更してみます。

iOSのローカルiPアドレスを確認します。

ローカルIPアドレスが判明したので、PCのブラウザでhttp://192.168.179.4:8888/textureにアクセス。



(このページはiOSアプリ内のWebサーバーからのレスポンスで表示しています。)


Choose Fileを押して、確認したい素材を選択します。
今回選択した素材はこれ。


f:id:maadaa:20180411194325p:plain


送信が完了すると、Unityちゃんの背景画像が変わりました。

以上でデモは終わりです。
Unityアプリ内Webサーバーを立てることで、他にも便利な機能が作れる気がします。
最後まで読んでいただきありがとうございました。

記事内で使用されているキャラクター及び背景画像は
ユニティちゃんライセンス条項の元に提供されています。

ユニティちゃんライセンス